我正在创建一个分面搜索,我正在尝试使用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。
答案 0 :(得分:14)
试试这个:
$fullArray = array($array1, $array2, $array3...);
call_user_func_array('array_intersect', $fullArray);
答案 1 :(得分:3)
首先,将这些数组转换为数组数组。然后,您可以将array_reduce
与array_intersect
结合使用,将可变数量的数组减少到一个。
答案 2 :(得分:0)
您可以使用$total_array
将这些数组转换为名为array_combine()
的单个数组,
然后使用array_intersect($full_array, $total_array)
。我希望这很有用
答案 3 :(得分:0)
一个可以使用:
$intersect = array_intersect(...$fullArray);