我正在尝试交叉任意数量的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个或更多的参数。
有没有人知道如何以尽可能简单的方式解决这个问题?
答案 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