PHP Array_intersect在具有未知键数的多维数组上

时间:2012-06-08 14:15:36

标签: php arrays multidimensional-array array-intersect

我正在尝试在包含资源(人员)的应用程序中创建高级搜索过滤器。我在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,但似乎无法做到正确。

3 个答案:

答案 0 :(得分:3)

可能的解决方案之一:您可以先extract()$realfilters数组值变为变量,然后将array_intersect()应用于它们。但是,只有在没有多少可能的过滤器时,此解决方案才适用。

另一个也许是最好的解决方案是在循环中交叉,例如:

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

答案 1 :(得分:3)

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

这将为您提供所有 $ 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);

答案 2 :(得分:0)

只需遍历主数组的顶部维度并与子数组相交。