我正在尝试在保存资源(人员)的应用程序中制作高级搜索过滤器。我在 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
但似乎不能正确。
可能的解决方案之一:您可以先将$realfilters
数组值extract()
到变量,然后将array_intersect()
应用于它们。但此解决方案仅适用于没有太多可能的过滤器的情况。
另一个可能是最好的解决方案是在循环中相交,如下所示:
$res_arr = array_shift($realfilters);
foreach($realfilters as $filter){
$res_arr = array_intersect($res_arr, $filter);
}
$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);