60

是否有内置函数来获取数组 1 中不存在于数组 2 中的所有成员?
我知道如何以编程方式做到这一点,只是想知道是否有一个内置函数可以做到这一点。所以拜托,没有代码示例。

4

5 回答 5

82

这听起来像是一份工作array_diff

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

于 2011-04-07T13:57:30.753 回答
51

array_diff 绝对是显而易见的选择,但从技术上讲,它与数组相交并不相反。举个例子:

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

print_r( array_diff($arr1, $arr2) );

您想要的是其中包含“兔子”和“鸟”的结果,但您得到的只是兔子,因为它正在寻找第一个数组中的内容而不是第二个数组(反之亦然)。要真正获得您想要的结果,您必须执行以下操作:

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

$diff1 = array_diff($arr1, $arr2);
$diff2 = array_diff($arr2, $arr1);
print_r( array_merge($diff1, $diff2) );

注意:此方法仅适用于带有数字键的数组。

于 2013-04-25T22:08:13.937 回答
4
$diff = array_diff($array1, $array2);

数组差异()

于 2011-04-07T13:57:45.507 回答
2

在我调查这个问题时澄清一下,@Jon 和@Dallas Caley 的答案都是正确的,具体取决于您的数组域。

如果您要比较的数组是结果的完整域,那么根据@Jon 的答案,一个简单的 array_diff 就足够了。

如果与您比较的数组不是结果的完整域,那么您应该按照@Dallas Caley 的回答使用双数组差异。

于 2019-01-30T11:44:11.877 回答
0

我发现这个docstore.mik.ua/orelly/webprog/pcook/ch04_24.htm非常有用。

您可能想要一个反向差异,通过颠倒标准差异中的数组顺序。

于 2015-02-26T17:35:58.053 回答