使用array_diff()函数,如何从数组2获取差异而不是数组1?

11

我正在尝试使用array_diff,如下所示。这是我的两个数组输出:

列表1输出

Array ([0] => 0022806 ) 

列表2的输出结果

Array ([0] => 0022806 [1] => 0023199 ) 

PHP

$diff = array_diff($list_1, $list_2);

print "DIFF: " . count($diff) ."<br>";
print_r($diff);

输出结果为:

DIFF: 0
Array ( )
任何想法我做错了什么?为什么没有返回0023199

2
如果你反转参数会发生什么呢?返回包含所有不在其他数组中出现的array1所有条目的数组。 - Damien Pirsy
4个回答

22

在使用 array_diff() 函数时,参数的顺序非常重要。

返回一个数组,其中包含所有来自 array1 的条目,这些条目不存在于其他任何数组中。


1
有更好的方法吗?我不知道顺序可能是什么样子...我只是想得到两者之间的差异。 - user1216398
1
对于array_diff()函数,可以双向比较,然后使用array_merge()函数将结果合并。这样可以得到一个数组中存在而另一个数组中不存在的元素,但不包括两个数组都存在的元素。 - Mark Baker

15

尝试;

$diff = array_merge(array_diff($list_1, $list_2), array_diff($list_2, $list_1));

print "DIFF: " . count($diff) ."<br>";
print_r($diff);

2

官方文档中的描述:

返回一个数组,其中包含所有在 array1 中出现但其他任何数组中都没有出现的条目。

如果您只想检查它们是否相同,可以使用 $list1 == $list_2


1
根据文档,第二个数组的值将从第一个数组中减去。或者换句话说,您从第一个数组开始,然后删除在第二个数组中出现的所有值。这将正确地产生您在上面看到的空数组。
您可能想尝试使用交集,这可能有助于您获得所需的结果。

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