在PHP中交叉未知数量的数组

时间:2011-03-22 09:56:36

标签: php arrays loops array-intersect

我正在尝试交叉任意数量的PHP数组,其数量取决于用户提供的参数,每个数组都可以包含任意数量的元素。

例如: array1(1,2,3,4,5) array2(2,4,6,8,9,23) array3(a,b,3,c,f) ... arrayN(x1,x2,x3,x4,x5 ...... xn)

由于array_intersect接受了一个params列表,我无法构建一个数组数组来交叉,并且必须绕过它。我尝试了这个解决方案:http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays但是这不起作用,因为报告的错误是array_intersect需要2个或更多的参数。

有没有人知道如何以尽可能简单的方式解决这个问题?

5 个答案:

答案 0 :(得分:39)

创建一个新的空数组,将每个数组添加到该数组,然后使用call_user_func_array()

$wrkArray = array( $userArray1,
                   $userArray2,
                   $userArray3
                 );
$result = call_user_func_array('array_intersect',$wrkArray);

答案 1 :(得分:4)

不要使用eval()!

试试这个

$isect = array();
for ($i = 1; $i <= $N; $i++) {
    $isect = array_intersect($isect, ${'array'.$i});
}

$arrays = array()
for ($i = 1; $i <= $N; $i++) {
    $arrays[] = ${'array'.$i};
}
$isect = call_user_func_array('array_intersect', $arrays);

答案 2 :(得分:1)

$arrays = [
    $userArray1,
    $userArray2,
    $userArray3
];
$result = array_intersect(...$arrays);

答案 3 :(得分:0)

我很晚才发布我的答案,但只是想分享一小段帮助我的代码,以防有人需要这个问题。

print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr);

我希望这会有所帮助

由于

答案 4 :(得分:0)

使用splat运算符(...),如:array_intersect(...$arrayOfArrays)或可互换call_user_func_array

这是在本教程的代码中: https://www.youtube.com/watch?v=AMlvtgT3t4E