PHP Array_intersect on multidimensional array with unknown number of keys

匆匆过客 提交于 2020-01-04 02:33:06

问题


I'm trying to make advanced search filters in an application that holds resources (people). I've got all the results in 1 multidimensional array. A user of the application can search for the persons Job title, skills, work field and country.

I've already made the part where I look up the people that meet the criteria given by the user. These results are stored in a multidimensional array. If the user is looking for someone with a specific resource with a job title and a specific skill the return value is this:

$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"
}

When the user also looks for a work field this is added to the result:

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

I need to know which resources meet all dimensions of the array so I can display them. (So in this example I need an array with just 1 value: 48). I think I need to use array_intersect but can't seem to get it right.


回答1:


One of the possible solutions: you may first extract() the $realfilters array values to variables, and then apply the array_intersect() to them. But this solution is applicable only if there are not many possible filters.

Another one and probably the best solution would be to intersect in a loop, something like:

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



回答2:


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

That will give you the elements present in all the sub arrays of $array.

edit- This above is like a shortcut for writing:

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

A loop could be used as well

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



回答3:


Just loop through the top dimension of the main array and intersect the sub-arrays.



来源:https://stackoverflow.com/questions/10950577/php-array-intersect-on-multidimensional-array-with-unknown-number-of-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!