我需要比较两个包含mySQL表值的数组,然后识别两个数组中不存在的值。我遇到的问题是两个数据库表上的字段名称是不同的,我正在努力弄清楚如何提取值并比较两者。
我将列出与此相关的所有代码 - 希望有人能够提供帮助。
首先,最初调用MySQL获取数据
$sql1 = "SELECT modname FROM users_modules WHERE email='$email'";
$result1 = $conn->query($sql1);
while ($row = $result1->fetch_assoc()){
$indMods[] = $row;
}
$sql2 = "SELECT module, mod_name, level FROM modules WHERE level = '$level'";
$result2 = $conn->query($sql2);
while ($row2 = $result2 -> fetch_assoc()){
$allMods[] = $row2;
}
返回以下两个数组:
$indMods
数组
array(5) {
[0]=>
array(1) {
["modname"]=>
string(3) "302"
}
[1]=>
array(1) {
["modname"]=>
string(3) "303"
}
[2]=>
array(1) {
["modname"]=>
string(3) "304"
}
[3]=>
array(1) {
["modname"]=>
string(3) "305"
}
[4]=>
array(1) {
["modname"]=>
string(3) "306"
}
}
$allMods
数组
array(10) {
[0]=>
array(3) {
["module"]=>
string(3) "301"
["mod_name"]=>
string(42) "3.01 Introduction to Facilities Management"
["level"]=>
string(1) "3"
}
[1]=>
array(3) {
["module"]=>
string(3) "302"
["mod_name"]=>
string(35) "3.02 CSR & Sustainability in FM"
["level"]=>
string(1) "3"
}
[2]=>
array(3) {
["module"]=>
string(3) "303"
["mod_name"]=>
string(47) "3.03 Customer & Stakeholder Relations in FM"
["level"]=>
string(1) "3"
}
[3]=>
array(3) {
["module"]=>
string(3) "304"
["mod_name"]=>
string(39) "3.04 FM Specification & Procurement"
["level"]=>
string(1) "3"
}
[4]=>
array(3) {
["module"]=>
string(3) "305"
["mod_name"]=>
string(41) "3.05 Health & Safety Responsibilities"
["level"]=>
string(1) "3"
}
[5]=>
array(3) {
["module"]=>
string(3) "306"
["mod_name"]=>
string(44) "3.06 Project Management within FM Operations"
["level"]=>
string(1) "3"
}
[6]=>
array(3) {
["module"]=>
string(3) "307"
["mod_name"]=>
string(25) "3.07 FM Budget Management"
["level"]=>
string(1) "3"
}
[7]=>
array(3) {
["module"]=>
string(3) "308"
["mod_name"]=>
string(45) "3.08 FM within the context of an organisation"
["level"]=>
string(1) "3"
}
[8]=>
array(3) {
["module"]=>
string(3) "311"
["mod_name"]=>
string(31) "3.11 Building Maintenance in FM"
["level"]=>
string(1) "3"
}
[9]=>
array(3) {
["module"]=>
string(3) "313"
["mod_name"]=>
string(46) "3.13 Disaster Recovery & Contingency Plans"
["level"]=>
string(1) "3"
}
}
我想从$allMods
中提取module
数据{/ 1}}值中不存在modname
值的数据
有人可以帮忙吗?
由于
答案 0 :(得分:3)
为其中一个或两个字段添加别名,以便按键匹配:
$sql1 = "SELECT modname AS module FROM users_modules WHERE email='$email'";
现在有一个module
而不是modname
的密钥。
您可以使用array_diff
来查找数组之间的差异,只要它们具有相似的结构即可。在您的情况下,这将从您的第二个数据库查询中删除其他两个键。
例如:
$sql1 = "SELECT modname AS module FROM users_modules WHERE email='$email'";
$result1 = $conn->query($sql1);
while ($row = $result1->fetch_assoc()){
$indMods[] = $row;
}
$sql2 = "SELECT module FROM modules WHERE level = '$level'";
$result2 = $conn->query($sql2);
while ($row2 = $result2 -> fetch_assoc()){
$allMods[] = $row2;
}
$difference = array_diff($indMods, $allMods);
PHP的文档array_diff
:http://php.net/manual/en/function.array-diff.php
请注意,有很多方法可以做到这一点。这只是一个。
答案 1 :(得分:0)
$x = [];
foreach ($indMods as $v) {
array_push($x, $v['modname']);
}
$extracted = [];
foreach ($allMods as $k => $v) {
$modValue = $v['module'];
if (!in_array($modValue, $x)) {
array_push($extracted, $v);
}
}
var_dump($extracted);