首页 > 解决方案 > 在数组中查找相交值

问题描述

我需要获取所有数组中的值。例子:

$array1 = [1,3,6,7];
$array2 = [63,34,1,2];
$array3 = [1,7,5,2];
$array4 = [];

答案 - 空数组 []。

$array1 = [1,3,6,7];
$array2 = [63,34,1,2];
$array3 = [1,7,5,2];

答案 - [1]

我可以用 array_intersect() 做到这一点 -

$result = array_intersect($array1, $array2,  $array3);

但我有一个大问题 - 我不知道我有多少已声明的数组 (min=0, max=7)

$a = rand(true, false);
$b = rand(true, false);
if ($a) {
    $array1 = [1,3,5,7];
}
if ($b) {
    $array2 = [];
}
$array3 = [1,8,99];

如果我有$array2- 结果将由空数组 []。否则 - 结果为 [1]。所以我只需要使用声明的数组。

我可以找到下一个声明的数组

$all = [
    $array1 ?? null,
    $array2 ?? null,
    $array3 ?? null,
];

foreach ($all as $key => $item) {
    if ($item === null) {
        unset($all[$key]);
    }
}

但是我现在如何找到相交的值?

标签: phparrays

解决方案


使用call_user_func_array或可变参数语法(从 php5.6 开始):

array_intersect(...$all);   // since php5.6

call_user_func_array('array_intersect', $all);  // for versions older than php5.6

推荐阅读