在PHP中与未知数量的数组相交

Posted

技术标签:

【中文标题】在PHP中与未知数量的数组相交【英文标题】:Intersect unknown number of arrays in PHP 【发布时间】:2011-07-20 08:28:57 【问题描述】:

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

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

由于 array_intersect 需要一个参数列表,我无法构建一个数组数组来相交,我必须解决这个问题。我试过这个解决方案:http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays 但这不起作用,因为报错 array_intersect 需要 2 个或更多参数。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

已经尝试过了,正如我原来问题的链接中提到的那样。这是我得到的错误:“警告:array_intersect() [function.array-intersect]:至少需要 2 个参数,1 个在... " 真傻,我错过了 call_user_func 的“_array”部分!谢谢! @swader - 这是一个容易犯的错误......不要太过分了:-)【参考方案2】:

不要使用 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);

【讨论】:

请使用 $'array' 。 $i 如果你真的走这条路。 第一个选项不行,因为结果被初始化为一个空数组,后面相交的结果永远是一个空数组。【参考方案3】:
$arrays = [
    $userArray1,
    $userArray2,
    $userArray3
];
$result = array_intersect(...$arrays);

【讨论】:

【参考方案4】:

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

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

希望对你有帮助

谢谢

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于在PHP中与未知数量的数组相交的主要内容,如果未能解决你的问题,请参考以下文章

PHP相交两个数组并替换一项

PHP递归数组相交键触发字符串值

PHP多维数组相交

PHP相交与MySQL相交

相交键后的PHP数组排序关联键

找到与一组数组相交的最小数组