PHP の array_filter() で条件に一致した配列の要素を抽出する

PHP で array.filter のようなことをしたくなったのでメモ。

コード

<?php

declare(strict_types=1);

function getEmployeeList(string $dept_name): array
{
    return array_values(
        array_filter(
            $employees,
            function($employee) use ($dept_name) {
                return $employee->getDeptName() === $dept_name;
            }
        )
    );
}

イメージとしてこのような感じで意図した挙動になることを確認しました。

やっていることととしては、「ある部署に所属する (部署名 $dept_name で抽出) 社員全員の一覧」を抽出しています。

なお、前提として社員データの配列 $employees (各要素が予め定義された Employeeオブジェクト) があるものとしています。

ところで、この形 Eloquent の複合条件抽出でも見かけました……そう、 array_filter() の第二引数(コールバック関数)がクロージャで、スコープを越えて外部変数を使うために use句 を用いる、という形がそっくりそのままですね。

デジャヴも良いところですね。

参考

arra_values()

array_filter()

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。