3

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

4

2 回答 2

4

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

另一种可能是最好的解决方案是在一个循环中相交,例如:

$res_arr = array_shift($realfilters);
foreach($realfilters as $filter){
     $res_arr = array_intersect($res_arr, $filter);
}
于 2012-06-08T14:31:50.300 回答
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);
于 2012-06-08T15:28:15.413 回答