Php 如何比较不同的阵列?
我需要显示电子邮件地址,没有在我的新数据库中注册的用户的名字和姓氏Php 如何比较不同的阵列?,php,arrays,Php,Arrays,我需要显示电子邮件地址,没有在我的新数据库中注册的用户的名字和姓氏 while($array = $resultado->fetch_array(MYSQLI_ASSOC)){ $portal_old[$array['email']] = $array; } while($array2 = $resultado2->fetch_array(MYSQLI_ASSOC)){ $portal_new[$array2['email']] = $array2; } 我选择了旧
while($array = $resultado->fetch_array(MYSQLI_ASSOC)){
$portal_old[$array['email']] = $array;
}
while($array2 = $resultado2->fetch_array(MYSQLI_ASSOC)){
$portal_new[$array2['email']] = $array2;
}
我选择了旧数据库的三列和新数据库的三列。我创建了两个数组,每个数组都接收查询结果
但是,当比较显示所有用户时,不会进行比较
检查我的代码:
while($array = $resultado->fetch_array(MYSQLI_NUM)){
$portal_old[] = $array;
}
while($array2 = $resultado2->fetch_array(MYSQLI_NUM)){
$portal_new[] = $array2;
}
foreach ($portal_old as $portal) {
if(!in_array($portal, $portal_new)){
$result[] = $portal;
}
}
这是可行的,约翰·史密斯在这里得到$result,而乔·布莱克没有:
<?php
$name = array(0 => 'john', 1 => 'smith');
$portal_old[] = $name;
$name = array(0 => 'joe', 1 => 'black');
$portal_old[] = $name;
//print_r($portal_old);
//shows: Array ( [0] => Array ( [0] => john [1] => smith ) [1] => Array ( [0] => joe [1] => black ) )
$name = array(0 => 'jason', 1 => 'mill');
$portal_new[] = $name;
$name = array(0 => 'joe', 1 => 'black');
$portal_new[] = $name;
//print_r($portal_new);
//shows: Array ( [0] => Array ( [0] => jason [1] => mill ) [1] => Array ( [0] => joe [1] => black ) )
foreach($portal_old as $key=>$value) {
if(!in_array($value[0], $portal_new[0]) && !in_array($value[1], $portal_new[1])) {
$result[] = $value;
}
}
print_r($result);
//shows: Array ( [0] => Array ( [0] => john [1] => smith ) )
?>
这是因为$portal_old和$portal_new的结果是多维数组,您需要通过查看数组的数组内部进行比较 假设电子邮件地址应该能够唯一地标识注册用户,那么在从每个数据库构建结果数组时,您可以使用电子邮件地址作为密钥
while($array = $resultado->fetch_array(MYSQLI_ASSOC)){
$portal_old[$array['email']] = $array;
}
while($array2 = $resultado2->fetch_array(MYSQLI_ASSOC)){
$portal_new[$array2['email']] = $array2;
}
为了使其正常工作,您需要在获取时使用MYSQLI_ASSOC
而不是MYSQLI_NUM
,并在构建数组时指定电子邮件列的名称,或者如果使用MYSQLI_NUM
,则指定电子邮件列的数字索引
然后,您可以使用来轻松找到您要查找的结果
$result = array_diff_key($portal_old, $portal_new);
这将对您有用:
$i = $j = 0;
while($array = $resultado->fetch_array(MYSQLI_NUM)){
$portal_old[$i][$array['0'].' | '.$array['1'].' | '.$array['2']] = $array;
}
while($array2 = $resultado2->fetch_array(MYSQLI_NUM)){
$portal_new[$j][$array2['0'].' | '.$array2['1'].' | '.$array2['2']] = $array2;
}
// Get only array keys
$old_arr_key = array_keys($portal_old[0]);
$new_arr_key = array_keys($portal_new[0]);
// Result
$result = array_diff($new_arr_key,$old_arr_key);
print_r($result);
欢迎来到堆栈溢出!我对你的问题稍加修改;如果您不同意编辑,可以将其回滚;点击你文章下方的“编辑…之前”链接来完成。点击该链接将带您进入编辑历史记录,在那里您可以回滚到以前版本的文章。同时,祝您入住愉快!从每一列中选择“三”列?这不是你的问题吗?