【问题标题】:array_intersect a variable amount of arraysarray_intersect 可变数量的数组
【发布时间】: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。

【问题讨论】:

    标签: php arrays variables loops array-intersect


    【解决方案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)。我希望这有用

      【讨论】:

      • 查看我上面的编辑 - 我需要比较每个数组并在所有数组中找到匹配的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2022-08-17
      • 2011-08-04
      • 2013-08-26
      • 1970-01-01
      相关资源
      最近更新 更多