return 显示在所有三个子数组中的数字数组

return an array of numbers that show up in all three sub arrays

我想比较 $ids 中的所有子数组,我只想 return 显示在所有三个数组中的数字,所以它将 return 3 和 4 作为数组。

$ids = [
    [1,2,3,4],
    [2,3,4],
    [3,4,5],
];

期待 return

array(3,4)

更新:抱歉,我遗漏了我不知道关联数组中有多少个数组的细节,它可能是 2 个子数组,有时可能是 5 个。我感谢所有的答案已收到。

拼接出第一个子数组然后循环剩下的用array_intersect过滤结果到3,4.

$res = array_splice($ids,0,1)[0];

foreach($ids as $id){
    $res = array_intersect($res, $id);
}

var_dump($res); // 3,4

https://3v4l.org/Z7uZK

显然array_intersect就是解How to get common values from two different arrays in PHP。如果你知道子数组的数量和它们的索引那么它就很简单:

$result = array_intersect($ids[0], $ids[1], $ids[2]);

但是,如果您需要对 unknown/variable 个子数组 and/or 未知索引执行此操作,请使用 $ids 作为带有 call_user_func_array 的参数数组:

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

或者更好地使用 Argument unpacking via ... (PHP >= 5.6.0):

$result = array_intersect(...$ids);