array_intersect(),其动态参数长度为

时间:2017-04-30 20:24:51

标签: php arrays dynamic

我有一个数组数组,在运行脚本时可能有不同的元素数。

$strict = [
    [0] => ['one', 'two', 'three', 'four'],
    [1] => ['one', 'two', 'four', 'eight'],
    [2] => ['two', 'four', 'ten', 'twenty'],
 /* [x] => [. . .] */
];

$result = array_intersect($strict[0], $strict[1], $strict[2]);
print_r($result); //shows ['two', 'four'];

我想做这样的事情:

$result = array_intersect($strict);

我传入一个动态长度的数组数组,array_intersect将遍历每个数组并仅采用公共条目。

执行array_intersect($strict)不起作用,因为该函数至少需要两个参数。

也许像

array_intersect(function ($array) {
    $list = '';
    foreach ($array as $el) {
        $list .= $el.',';
    }

    $list = rtrim($list, ',');

    return eval($list);
});

虽然这个特殊的方法仍然会抛出错误

  

警告:array_intersect():至少需要2个参数,1   给定

2 个答案:

答案 0 :(得分:4)

您可以使用call_user_func_array

  

使用参数数组

调用回调

所以你的回调是array_intersect,你可以像这样传递你的数组:

$result = call_user_func_array('array_intersect', $strict);

答案 1 :(得分:2)

您可以利用现代PHP的阵列打包/解包功能 - 即变量,或所谓的" splat" (for (var child of childrenToOperateOn) { console.log("Confirm child: " + child.todotask); } )运算符 - 以及:

...