我需要显示未在新数据库中注册的用户的电子邮件地址,名字和姓氏。
我选择了旧数据库的三列和新数据库的三列。我创建了两个数组,每个数组都接收查询结果。
但是当比较显示所有用户时,不会进行比较。
检查我的代码:
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;
}
}
答案 0 :(得分:1)
假设电子邮件地址应该能够唯一地标识注册用户,您可以使用电子邮件地址作为密钥,从而构建每个数据库的结果数组。
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
,并在构建阵列时指定电子邮件列的名称,或者如果您正在使用{ {1}},指定电子邮件列的数字索引。
然后,您可以使用array_diff_key轻松找到您要查找的结果。
MYSQLI_NUM
答案 1 :(得分:0)
这是有效的,约翰史密斯在这里得到了$结果,而乔布莱克没有:
<?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的结果是多维数组,你需要通过查看数组的数组进行比较。
答案 2 :(得分:0)
这对你有用:
$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);