PHPでの配列データのフィルタリングは、特にユーザー入力、APIデータ、またはデータベースの結果を処理する場合、非常に一般的な操作です。 array_filter()は、匿名関数(閉鎖)を組み合わせて柔軟で効率的なデータフィルタリングを実現できるPHPによって提供される強力な機能です。この記事では、さまざまなフィルタリングロジックを実装するためにそれらを使用する方法を理解するために段階的に説明します。
array_filter()は、コールバック関数(コールバック)を介して配列内の各要素を判断する内蔵PHP関数であり、条件を満たす要素で構成される新しい配列を返します。
基本的な構文は次のとおりです。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$配列:フィルターする配列。
$ callback :各要素に使用されるコールバック関数。省略した場合、 falseの値を持つ要素はデフォルトで削除されます。
$モード:オプションパラメーターキー名をパラメーターとして渡すかどうかを判断します。
閉鎖とも呼ばれる匿名関数は、PHPに名前のない関数であり、一時的なロジック処理中に使用するのに非常に適しています。構文は次のとおりです。
$filterFunc = function($value) {
return $value > 10;
};
このタイプの関数は、通常、 Array_Filter()で使用され、より詳細なデータ制御を実現します。
$numbers = [4, 15, 9, 23, 5];
$filtered = array_filter($numbers, function($value) {
return $value > 10;
});
print_r($filtered);
出力:
Array
(
[1] => 15
[3] => 23
)
10を超える数値のみが保持されていることがわかります。
$formData = [
'name' => 'Alice',
'email' => '',
'age' => null,
'city' => 'Beijing'
];
$cleanData = array_filter($formData, function($value) {
return !empty($value);
});
print_r($cleanData);
出力:
Array
(
[name] => Alice
[city] => Beijing
)
$data = [
'user_id' => 101,
'user_name' => 'Bob',
'admin_role' => true,
'timestamp' => 1681920000
];
$filtered = array_filter($data, function($value, $key) {
return str_contains($key, 'user');
}, ARRAY_FILTER_USE_BOTH);
print_r($filtered);
出力:
Array
(
[user_id] => 101
[user_name] => Bob
)
データソース( https://m66.net/api/postsなど)から次の配列を取得したとします。
$posts = [
['title' => 'Hello World', 'url' => 'https://m66.net/post/1', 'published' => true],
['title' => 'Draft Post', 'url' => 'https://m66.net/post/2', 'published' => false],
['title' => 'PHP Tips', 'url' => 'https://m66.net/post/3', 'published' => true],
];
array_filter()を使用して、公開された記事のみを保持できます。
$publishedPosts = array_filter($posts, function($post) {
return $post['published'] === true;
});
print_r($publishedPosts);
array_filter()と匿名関数を組み合わせることで、さまざまなカスタマイズされたデータフィルタリングニーズを簡単に達成できます。数値、文字列、または多次元配列をフィルタリングするかどうかにかかわらず、柔軟に処理するために適切な閉鎖関数を渡すだけです。
提案:
ユーザーデータを処理するときは、フィルターを使用して不要なコンテンツをクリアしてください。
匿名関数を使用して、コードの読みやすさとモジュール性を可能な限り改善します。
キー名を元の配列と一致させたい場合は、 array_filter_use_bothで使用できます。