如何比较不同的数组?

时间:2015-12-16 17:21:27

标签: php arrays

我需要显示未在新数据库中注册的用户的电子邮件地址,名字和姓氏。

我选择了旧数据库的三列和新数据库的三列。我创建了两个数组,每个数组都接收查询结果。

但是当比较显示所有用户时,不会进行比较。

检查我的代码:

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;
  }


}

3 个答案:

答案 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);