PHPでは、純粋に機能的なプログラミング言語ではありませんが、組み込みの機能ツールを介して、コードをよりエレガントで、よりシンプルで簡単に書くことができます。 array_filter()は、しばしば見過ごされがちですが、非常に強力なツール機能です。この記事では、array_filter()を使用してPHPコードスタイルを改善し、機能的なプログラミングに近づく方法を紹介します。
array_filter()は、PHPの組み込み配列処理機能の1つであり、配列内の要素をフィルタリングするために使用されます。配列の各要素で関数を実行するコールバック関数を受け入れ、 trueの返品値を持つ要素が保持され、他のものが削除されます。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
コールバック関数が提供されていない場合、配列のfalseに相当する値( 0 、 null 、 falseなど)を削除します。
多くの場合、フォームまたはAPIからいくつかのデータを受け取ります。これには、空の文字列、null、falseなどの無効なコンテンツが含まれる場合があります。Array_filter ()を使用してコードの行をクリーンアップします。
$data = [
'username' => 'alice',
'email' => '',
'age' => null,
'subscribe' => false,
];
$cleaned = array_filter($data);
print_r($cleaned);
出力:
Array
(
[username] => alice
)
これは、手動でクリーンアップを書くよりもはるかにエレガントです。
コールバック関数を渡すことにより、より柔軟な状態フィルタリングを実装できます。たとえば、ユーザーのグループからアクティブユーザーを除外します。
$users = [
['name' => 'Alice', 'active' => true],
['name' => 'Bob', 'active' => false],
['name' => 'Carol', 'active' => true],
];
$activeUsers = array_filter($users, function ($user) {
return $user['active'];
});
print_r($activeUsers);
出力にはアリスとキャロルのみが含まれます。
多くの無効なまたは一時的なユーザーを含むリモートAPI( https://api.m66.net/usersなど)からデータのセットを取得すると、すぐにフィルタリングできます。
$response = file_get_contents('https://api.m66.net/users');
$users = json_decode($response, true);
$validUsers = array_filter($users, function ($user) {
return isset($user['email']) && filter_var($user['email'], FILTER_VALIDATE_EMAIL);
});
ご覧のとおり、 array_filter()を「宣言的なプログラミング」スタイルに近づけ、「ループと条件を実装する方法」に焦点を当てるのではなく、コードの意図がより明確になります。
array_filter()とarray_map()やarray_reduce()などの機能的な方法を組み合わせて、ほとんど役に立たない論理コードを記述できます。たとえば、アクティブユーザーのユーザー名をフィルタリングおよび抽出します。
$usernames = array_map(
fn($user) => $user['name'],
array_filter($users, fn($user) => $user['active'])
);
明確なセマンティクスを備えた簡潔でエレガント。
array_filter()は、軽量で強力で使いやすい機能です。よく使用すると、PHPをより機能的で読みやすくすることができます。従来のforeachと比較して、1つのコードで意図を明確に表現し、ボイラープレートコードを削減し、保守性を向上させることができます。
次のプロジェクトでarray_filter()を使用して、コードの品質とスタイルを改善してみてください!