【php】配列を複数条件で検索、絞り込みする方法メモ

大した話じゃないけどメモ。
やりたいことは、配列から条件で絞り込むみたいなこと。
array_filter使えばよいみたい。

// 検索対象のリスト
$items = [
    ["name" => "田中", "gender" => "woman"],
    ["name" => "高橋", "gender" => "woman"],
    ["name" => "亀井", "gender" => "woman"],
    ["name" => "櫻井", "gender" => "man"],
    ["name" => "松本", "gender" => "man"],
    ["name" => "大野", "gender" => "man"],
];

// 検索条件
$conditions = [
    "gender" => ["woman"],
];

// 検索処理 
$func = function($conditions) {
     return function($value) use($conditions) {
         return in_array($value["gender"], $conditions["gender"]);
     };
};

// 検索実行
$result = array_filter($array, $func($conditions));

// 結果
print_r($result);
/*
=> Array
(
    [0] => Array
        (
            [name] => 田中
            [gender] => woman
        )

    [1] => Array
        (
            [name] => 高橋
            [gender] => woman
        )

    [2] => Array
        (
            [name] => 亀井
            [gender] => woman
        )
)
*/

ついでに、call_user_func使って即時関数ぽい書き方もできるみたい

・・・

// 検索条件
$conditions = [
    "gender" => ["woman"],
];

$result = array_filter($items, call_user_func(function($conditions) {
     return function($item) use($conditions) {
         return in_array($item["gender"], $conditions["gender"]);
     };
}, $conditions));

・・・

以上です。