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

表示できるように、どのリソースが配列のすべての次元を満たすかを知る必要があります。(したがって、この例では、値が 48 だけの配列が必要です)。使用する必要があると思いますarray_intersectが、正しく取得できないようです。

4

2 に答える 2

4

考えられる解決策の1つ:最初extract()$realfilters配列値を変数に適用してarray_intersect()から、それらに適用することができます。ただし、このソリューションは、可能なフィルターが多くない場合にのみ適用できます。

もう1つ、おそらく最良の解決策は、次のようなループで交差することです。

$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 に答える