我正在尝试在包含资源(人员)的应用程序中创建高级搜索过滤器。我在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
,但似乎无法做到正确。
答案 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)
只需遍历主数组的顶部维度并与子数组相交。