为什么array_diff()将两个不同的数组比较为相同并返回空结果?

时间:2013-05-10 13:26:57

标签: php arrays array-difference

我有这段代码:

$a1 = array(31001);
$a2 = array(31001, 31002);
$diff = array_diff($a1, $a2);
var_dump($diff);

根据PHP文档,我期待array_diff返回array(0 => 31002)

  

返回一个数组,其中包含array1中未包含的所有条目   存在于任何其他阵列中。

但是发布的代码返回空数组。任何人都可以解释为什么会发生这种情况以及如何获得正确的结果?

这是PHPfiddle example

感谢您提供任何帮助或有用的提示。

3 个答案:

答案 0 :(得分:7)

准确阅读文档。 $a1中存在且$a2中不存在的值集合为空:$a1只包含一个元素(31001),它也存在于{{1}中}}

您希望获取$a2中但不在$a2中的所有值,因此您必须切换数组的顺序,然后传递给$a1

array_diff()

答案 1 :(得分:2)

试试这个,它会起作用

$diff = array_diff($a2, $a1);

会提供

Array
(
[1] => 31002
)

但是当你尝试

$a1 = array(31001);
$a2 = array(31002, 31001);
$diff = array_diff($a2, $a1);

会提供

Array
  (
 [0] => 31002
 )

array_diff将返回数组(0 => 31002),仅在此条件下,这是由于元素的索引位置

答案 2 :(得分:0)

<?php

 $a1 = array(31001);
 $a2 = array(31002);
 $diff = array_diff($a1, $a2);

 var_dump($diff)

?>

在$ a2 = array()中添加一个元素