Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何比较不同的阵列?_Php_Arrays - Fatal编程技术网

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

欢迎来到堆栈溢出!我对你的问题稍加修改;如果您不同意编辑,可以将其回滚;点击你文章下方的“编辑…之前”链接来完成。点击该链接将带您进入编辑历史记录,在那里您可以回滚到以前版本的文章。同时,祝您入住愉快!从每一列中选择“三”列?这不是你的问题吗?