array_intersect 可变数量的数组
Posted
技术标签:
【中文标题】array_intersect 可变数量的数组【英文标题】:array_intersect a variable amount of arrays 【发布时间】:2012-09-05 01:19:01 【问题描述】:我正在创建一个分面搜索,并且我正在尝试使用 array_intersect
来比较数组并找到匹配的输入。
问题是我随时都会有不同数量的数组,具体取决于用户选择的过滤器:
$array_1, $array_2, $array_3
等等...
如何创建一个在这个意义上是动态的array_intersect
函数?
这是我尝试过的:
$next_array = 0;
for($i = 0; $i < $array_count; $i++)
$next_array++;
if ($i == 0)
$full_array = $array_.$i;
else
if(!empty($cvp_array.$next_array))
$full_array = array_intersect($full_array, $cvp_array_.$next_array);
------------- 编辑 -------------
我会尝试进一步缩小我的目标:
如果用户单击三个过滤器,则会创建三个数组,每个数组都有单独的结果:
Array_1 ( [0] => 2, [1] => 4, [2] => 6 )
Array_2 ( [0] => 1, [1] => 4, [2] => 6 )
Array_3 ( [0] => 6, [1] => 7, [2] => 8 )
我需要能够找到所有数组中的数字的代码。如果没有共同的数字,那么它将以错误或其他方式结束。在上面的例子中,我需要它来检索 6。如果它只是前两个数组,它将返回 4 和 6。
【问题讨论】:
【参考方案1】:试试这个:
$fullArray = array($array1, $array2, $array3...);
call_user_func_array('array_intersect', $fullArray);
【讨论】:
解释为什么会帮助这个答案 如果 $fullArray 中包含 1) ) ...call_user_func_array... 【参考方案2】:可以使用:
$intersect = array_intersect(...$fullArray);
【讨论】:
【参考方案3】:首先,将这些数组变成数组数组。然后您可以使用array_reduce
结合array_intersect
将可变数量的数组减少到一个。
【讨论】:
抱歉,通过将array_reduce
与 array_intersect
结合起来,非常努力地想象您的意思 - 也许举个例子会有所帮助?
类似这样的:$out = array_reduce($in,function(&$a,$b) $a = array_intersect($a,$b);,Array());
- 剩下要做的就是将所有单独的数组放入一个名为 $in
的大数组中
我将所有数组放入一个名为 $in
的数组中,但它会产生此错误:unexpected T_FUNCTION
- 再次感谢您的宝贵时间
啊,您使用的是旧版本的 php。好吧,您可以更新(总是一个好主意)或改用create_function('&$a,$b','$a = array_intersect($a,$b);');
。【参考方案4】:
您可以使用 array_combine()
将这些数组转换为名为 $total_array
的单个数组,
然后使用array_intersect($full_array, $total_array)
。我希望这有用
【讨论】:
查看我上面的编辑 - 我需要比较每个数组并在所有数组中找到匹配的值。以上是关于array_intersect 可变数量的数组的主要内容,如果未能解决你的问题,请参考以下文章
$a = (true === !!array_intersect(['1'],[3,2,1])); 之间有啥区别?并检查 in_array