【发布时间】:2011-12-04 19:10:51
【问题描述】:
参数是这样的:
function foo(arr1, arr2, arr3, arr4 ...)
并且该函数应该返回一个数组,其中包含 arr2、arr3、arr4 ... 中不存在于 arr1 中的所有元素。
是否有内置功能?还是我需要自己用foreach之类的东西来做? :)
【问题讨论】:
-
在集合论中它被称为补码
参数是这样的:
function foo(arr1, arr2, arr3, arr4 ...)
并且该函数应该返回一个数组,其中包含 arr2、arr3、arr4 ... 中不存在于 arr1 中的所有元素。
是否有内置功能?还是我需要自己用foreach之类的东西来做? :)
【问题讨论】:
没有完全符合您要求的内置函数。 array_diff() 很接近,但并不完全。所以你必须推出自己漂亮的整洁功能,否则做一些丑陋的事情:
array_diff( array_unique(
array_merge(
array_values($arr2),
array_values($arr3),
array_values($arr4)
)),
$arr1
);
如果您希望在数组中多次出现的值也在结果中多次表示,则可以删除对 array_unique() 的调用。
如果您的数组中的键都是数字的,或者如果您确定在多个被合并的数组中没有出现非数字键,您可以删除对 array_values() 的调用。
因此,在那些理想情况下,它可以简化为:
array_diff( array_merge( $arr2, $arr3, $arr4 ), $arr1 );
【讨论】:
您可以使用 array_diff 做到这一点,但您必须稍微扭转一下局面。
$result = array_diff (array_merge ($arr2, $arr3, $arr4), $arr1);
编辑:Trott 的回答涵盖了我没有的大量边缘情况。这可能是您将获得的最佳解决方案。
【讨论】:
【讨论】: