PHP Array_intersect未知数字键的多维数组(PHP Array_intersect

2019-09-17 22:16发布

我试图让先进的搜索过滤器中保存资源(人)的应用程序。 我有在1个多维数组的所有结果。 该应用程序的用户可以搜索的人员,职位,工作领域和国家。

我已经做了一部分,我抬头满足用户给定标准的人。 这些结果被存储在一个多维数组。 如果用户是找人带一个职位和特殊技能的特定资源的返回值是这样的:

$realfilters = array(2) {
["resourcesWithJobtitle"]=> array(6) {
   [0]=> string(1) "1"
   [1]=> string(2) "48"
   [2]=> string(2) "88"
}
["resourcesWithSkill"]=> array(9) {
   [0]=> string(1) "4"
   [1]=> string(1) "8"
   [2]=> string(1) "48"
   [3]=> string(2) "50"
}

当用户还会查找工作领域,这是添加到结果:

["resourcesWithWorkfield"]=> array(3) {
   [0]=> string(2) "48"
   [1]=> string(2) "96"
   [2]=> string(2) "97"
}

我需要知道哪些资源满足阵列的各个方面,所以我可以显示它们。 (因此,在这个例子中我需要与仅有1值的阵列:48)。 我想我需要使用array_intersect ,但似乎无法得到它的权利。

Answer 1:

其中一个可能的解决方案:你可以先extract()$realfilters数组变量赋值,然后应用array_intersect()给他们。 但这种方法仅适用如果没有许多可能的过滤器。

另外一个也可能是最好的解决办法是在一个循环相交,是这样的:

$res_arr = array_shift($realfilters);
foreach($realfilters as $filter){
     $res_arr = array_intersect($res_arr, $filter);
}


Answer 2:

$intersection = call_user_func_array('array_intersect', $array);

这会给你出现在$阵列的所有子阵列的元素。

编辑 - 这上面就像是写一个快捷方式:

$intersection = array_intersect($array['a'], $array['b'], ...and so on for all elements...);

一个循环可以被使用

$intersection = reset($array);
foreach ($array as $subarr) {
    $intersection = array_intersect($intersection, $subarr);
}
print_r($intersection);


Answer 3:

只是通过主阵列的顶部尺寸环和相交的子阵列。



文章来源: PHP Array_intersect on multidimensional array with unknown number of keys