14

我试图与任意数量的 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 需要一个参数列表,所以我无法构建一个数组数组来相交并且必须解决这个问题。我尝试了这个解决方案: http: //bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays但这不起作用,因为报告错误,array_intersect 需要 2 个或更多参数。

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

4

5 回答 5

42

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

$wrkArray = array( $userArray1,
                   $userArray2,
                   $userArray3
                 );
$result = call_user_func_array('array_intersect',$wrkArray);
于 2011-03-22T10:01:12.617 回答
4
$arrays = [
    $userArray1,
    $userArray2,
    $userArray3
];
$result = array_intersect(...$arrays);
于 2016-12-03T15:34:34.637 回答
3

不要使用 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);
于 2011-03-22T10:04:57.893 回答
0

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

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

我希望这有帮助

谢谢

于 2017-04-12T17:43:05.000 回答
-1

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

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

于 2018-05-02T07:40:02.980 回答