Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Compare - Fatal编程技术网

Php 显示数组差异不工作

Php 显示数组差异不工作,php,arrays,compare,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]

如何比较以下两个阵列? 当我使用:

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_键,我可以用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()  

这是正确的PHP手册 说出那个日期

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

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

可能是你需要的

  array_diff_key($array1, $array2)

array_diff_key-使用 比较

对于值,您可以使用array\u diff\u assoc

 array_diff_assoc($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($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
)

谢谢scaisEdge,功能强大:)@Michael如果我的答案是正确的,请将其标记为已接受……看看我是如何知道的,还要再等5分钟:)如果我需要比较这些值,该怎么办?更好地解释。。你的意思是什么?它仍然不起作用,它仍然不仅显示了两者之间的唯一区别。预期的结果是什么output@Michael您交换了参数吗?我没有得到相同的输出,可能是因为您手动创建了数组;然后循环foreach$array[]=$value;这仍然不清楚,但是如果您想要
39077
您需要交换参数
数组_diff($array2,$array1)
,但是它只显示了array2中的所有值,而不是在$array1中之前的所有值之间的差异。您的显示为空和交换的显示
39077
:您确定没有实际运行
array\u intersect()