在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中与未知数量的数组相交的主要内容,如果未能解决你的问题,请参考以下文章