与array_intersect相反?

时间:2011-04-07 13:53:57

标签: php arrays array-intersect

是否有内置函数来获取阵列1中不存在的数组1的所有成员?
我知道如何以编程方式执行此操作,只是想知道是否有内置函数执行相同操作。所以,请没有代码示例。

5 个答案:

答案 0 :(得分:61)

这听起来像是array_diff的工作。

  

返回包含所有内容的数组   array1中的条目不是   存在于任何其他阵列中。

答案 1 :(得分:35)

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) );
  

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

答案 2 :(得分:4)

$diff = array_diff($array1, $array2);

array_diff()

答案 3 :(得分:0)

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

您可能需要反向差异,通过在标准差异中反转数组的顺序。

答案 4 :(得分:0)

在澄清这个问题时,请澄清一下,根据数组的域,@ Jon和@Dallas Caley的答案都是正确的。

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

如果与您比较的数组不是结果的完整域,则应按照@Dallas Caley的答案使用double array_diff。