'array_filter' によるフィルタリング
CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 41/68。
array_filter()関数は、特定の条件を満たす要素だけを含む新しいarrayを作成するよう設計されています。すべての要素を変換するarray_map()とは異なり、array_filter()はテストに合格するかどうかに基づいて要素を選択的に保持します。
コールバック関数を指定せずに使用すると、array_filter() は配列からすべての「empty」値を自動的に削除します。PHP では、いくつかの値を empty と見なします。false、null、0、空の文字列 ""、および空の配列です。
<?php
$mixedData = ["hello", 0, "world", false, null, "PHP", ""];
$cleanedData = array_filter($mixedData);
// 結果: ["hello", "world", "PHP"]
?>この動作により、array_filter()はdataのarrayを整理するのに非常に便利です。元のarrayは変更されず、意味のあるvaluesだけを含む新しいarrayを取得できます。これは、ユーザーのinputを処理するときや、不要なemptyのvaluesが含まれている可能性のあるdataを扱うときに特に役立ちます。
チャレンジ
簡単1つの入力として、数値、空の文字列、ゼロ、テキストによる回答など、さまざまなデータ型を含むカンマ区切りのアンケート回答リストを受け取ります。input は yes,0,,no,5,,true,false,answer の形式です。
Read して input を取得し、カンマ区切りの values を array に変換し、コールバック関数なしで array_filter() を使用してすべての empty values を remove し、remaining value を登場する順序でそれぞれ別の行に print します。
array_filter() をコールバックなしで使用すると、PHP が empty とみなす values、つまり false、null、0、empty strings ""、および empty arrays が自動的に remove されることを覚えておいてください。
入力形式: カンマで separated された values を含む1行(例: yes,0,,no,5,,true,false,answer)
期待される出力: filtered array 内の各 non-empty value を、登場する順序でそれぞれ別の行に print する
自分で試してみよう
<?php
// 入力を読み取る
$input = trim(fgets(STDIN));
// カンマ区切りの値を配列に変換する
$responses = explode(',', $input);
// TODO: 以下にコードを書いてください
// array_filter() を使用して空の値を削除し、残りの各値を出力する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
6配列の高階関数
'array_map' による変換'array_map' とカスタム関数'array_filter' によるフィルタリング'array_filter' とカスタム関数'array_reduce' による畳み込み'array_walk' による反復処理まとめ:データ処理自分で練習してみよう: PHPオンラインコンパイラ