2011-03-22 40 views
11

我试图交叉任意数量的PHP数组,其数量取决于用户提供的参数,每个数组都可以有任意数量的元素。在PHP中相交数组的未知数

例如: ARRAY1(1,2,3,4,5) 数组2(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个或更多的参数。

有没有人有任何想法如何以尽可能简单的方式来解决这个问题?

回答

38

创建一个新的空数组,加上每个阵列到的,然后使用call_user_func_array()

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

已经试过了,因为在我原来的问题链接提及。这是我得到的错误:“警告:array_intersect()[function.array-intersect]:至少需要2个参数,1中给出...” – Swader 2011-03-22 10:18:53

+0

愚蠢的我,我错过了call_user_func的“_array”部分!谢谢! – Swader 2011-03-22 10:29:17

+1

@swader - 这是一个容易犯的错误...请不要自责太多:-) – 2011-03-22 10:44:07

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); 
+1

请使用** $ {'array'。 $ i} **如果你真的走这条路。 – eisberg 2011-03-22 10:21:12

+1

@eisberg:thx,已更新 – rik 2011-03-22 17:56:33

+0

第一个选项不起作用,因为结果初始化为一个空数组,因此以下相交的结果将始终为空数组。 – 2017-06-16 13:09:37

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

我张贴我的答案非常非常晚,但只想分享一小块代码,可以帮助我,万一有人需要这个问题。

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

我希望这有助于

感谢