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

时间:2019-01-31 20:14:33

标签: php php-7

我想比较$ ids中的所有子数组,并且只想返回所有三个数组中显示的数字,因此它将3和4作为数组返回。

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

期望它返回

array(3,4)

更新:抱歉,我不愿透露细节,我不知道关联数组中有多少个数组,它可能是2个子数组,其他时候可能是5个。我很感谢收到的所有答案

2 个答案:

答案 0 :(得分:2)

拼接出第一个子数组,然后循环其余子数组,并使用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

答案 1 :(得分:2)

显然array_intersect是解决方案How to get common values from two different arrays in PHP。如果您知道子数组及其索引的数量,那么就很简单:

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

但是,如果您需要对未知/可变数量的子数组和/或未知索引执行此操作,请使用$ids作为带有call_user_func_array的参数数组:

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

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

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