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] =&gt; 2, [1] =&gt; 4, [2] =&gt; 6 )

Array_2 ( [0] =&gt; 1, [1] =&gt; 4, [2] =&gt; 6 )

Array_3 ( [0] =&gt; 6, [1] =&gt; 7, [2] =&gt; 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_reducearray_intersect 结合起来,非常努力地想象您的意思 - 也许举个例子会有所帮助? 类似这样的:$out = array_reduce($in,function(&amp;$a,$b) $a = array_intersect($a,$b);,Array()); - 剩下要做的就是将所有单独的数组放入一个名为 $in 的大数组中 我将所有数组放入一个名为 $in 的数组中,但它会产生此错误:unexpected T_FUNCTION - 再次感谢您的宝贵时间 啊,您使用的是旧版本的 php。好吧,您可以更新(总是一个好主意)或改用create_function('&amp;$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

如何计算 php 中未知数量数组的交集?

array_intersect 内部多维数组

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

array_intersect():参数 #1 不是数组?

php动态array_intersect