【问题标题】:Inverse of array_intersect()array_intersect() 的逆
【发布时间】:2011-12-04 19:10:51
【问题描述】:

参数是这样的:

function foo(arr1, arr2, arr3, arr4 ...)

并且该函数应该返回一个数组,其中包含 arr2、arr3、arr4 ... 中不存在于 arr1 中的所有元素。

是否有内置功能?还是我需要自己用foreach之类的东西来做? :)

【问题讨论】:

标签: php arrays


【解决方案1】:

没有完全符合您要求的内置函数。 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 );

【讨论】:

    【解决方案2】:

    您可以使用 array_diff 做到这一点,但您必须稍微扭转一下局面。

    $result = array_diff (array_merge ($arr2, $arr3, $arr4), $arr1);
    

    编辑:Trott 的回答涵盖了我没有的大量边缘情况。这可能是您将获得的最佳解决方案。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2011-07-31
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 2017-05-09
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多