显示数组差异无效

时间:2017-02-17 20:04:09

标签: php arrays compare

我如何比较以下两个数组? 当我使用时:

array_diff($array1, $array2)

它只显示$ array1中的所有数组,而不仅仅是39077

Array1 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 ) 

Array2 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077 )

如果我使用array_diff_keys,我可以用1234作为array1中的值来欺骗它,因为该函数只检查有多少个键而不是什么值。

Array1 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 1234) 

Array2 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077 )

输出将是

array()  

2 个答案:

答案 0 :(得分:1)

这是正确的PHP手册 http://php.net/manual/en/function.array-diff.php 说那个date_diff

  

将array1与一个或多个其他数组进行比较并返回   array1中的值,不存在于任何其他数组中。

并且特定于简单数组而不是键(关联)数组..所以对于键数组不起作用

可能你需要

  array_diff_key($array1, $array2)

  

array_diff_key - 使用键计算数组的差异   比较

或者您可以使用array_diff_assoc

的值
 array_diff_assoc($array1, $array2);

答案 1 :(得分:0)

  

它只显示$ array1中的所有数组,而不仅仅是39077

只需交换参数

array_diff($array2, $array1);
  

注意:这个答案将返回$ array2中$ array1中不存在的值,它不会返回$ array1中的值   不在$ array2。

示例

$ php -r '$a1=array(1,2,3,7,8); $a2=array(1,2,7,10,15); print_r(array_diff($a2,$a1));'
Array
(
    [3] => 10
    [4] => 15
)

<强>输入

$ cat test.php 
<?php

$array1 = array( 40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503);
$array2 = array( 40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503, 39077);

print_r(array_diff($array2,$array1));

?>

<强>输出

$ php test.php 
Array
(
    [11] => 39077
)