如何比较不同的数组?

3

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

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

但当比较时,却没有显示所有用户,也没有做出比较。

请检查我的代码:

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


}

1
欢迎来到Stack Overflow!我稍微编辑了一下你的问题;如果你不同意这个编辑,你可以撤销它;点击你的帖子下面的“edited ... ago”链接即可。点击该链接将带您进入编辑历史记录,您可以回滚到以前版本的帖子。与此同时,祝您在这里愉快! - S.L. Barth
选择每个表中的“三”列?这不是你的问题吗? - Progrock
3个回答

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,并在构建数组时指定电子邮件列的名称,或者如果您使用MYSQLI_NUM,则指定电子邮件列的数字索引。
然后,您可以使用array_diff_key轻松找到您要查找的结果。
$result = array_diff_key($portal_old, $portal_new);

0

这个有效,John Smith 在 $result 中得到了结果,而 Joe Black 没有:

<?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 的结果都是多维数组,你需要查看数组内部的数组来进行比较。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接