第20回: 配列関数 — ループを書かずにデータを処理する
配列処理のたびに foreach でループを書いていると、コードが長くなりがちです。PHPには配列を短く安全に操作できる関数が豊富に用意されています。arraymap・arrayfilter・arrayreduce を覚えると、データ処理がぐっとシンプルになります。
Category
配列処理のたびに foreach でループを書いていると、コードが長くなりがちです。PHPには配列を短く安全に操作できる関数が豊富に用意されています。arraymap・arrayfilter・arrayreduce を覚えると、データ処理がぐっとシンプルになります。
データベースから取得したユーザー一覧は「複数のユーザー情報(連想配列)が並んだ配列」です。この「配列の中に配列」が多次元配列です。構造を把握していないと値の取得で迷いますが、パターンを覚えると一気に扱いやすくなります。
添字配列は番号で管理するため、要素数が増えると「0番目が名前で、1番目が年齢で……」と覚えるのが大変になります。連想配列はキーに名前をつけられるため、データの意味がコードから直接読み取れます。
$score1 = 80; $score2 = 90; のように変数を並べても、人数が増えた瞬間に破綻します。添字配列を使えば、同じ種類の値を番号付きで管理でき、ループで一括処理できるようになります。
for・foreach・while のすべてのループで使える break と continue を知ると、ループ内の制御が柔軟になります。不要な処理をスキップしたり、条件を満たした時点でループを抜けたりできるようになり、パフォーマンスとコードの読みやすさが向上します。
for文で配列を走査するとき、$i < count($array) の条件を書き忘れたり、添字を1つずらしてしまったりするミスが起きやすいです。foreach文を使えば添字の管理が不要になり、配列処理のバグを大幅に減らせます。
while文でも同じことは書けますが、「初期化・条件・増減」がバラバラに書かれると意図が読み取りにくくなります。for文はこれらを1行にまとめることで、「何回ループするか」を一目で伝えられます。
for文は「回数が決まっているループ」に向いていますが、while文は「条件が真の間くり返す」ループです。ページネーションのデータ取得、キューの処理、入力値の検証ループなど、終了タイミングが動的に決まる処理に活用できます。
PHP 8で導入された match 式は、switch文の課題を解消した新しい分岐構文です。型まで厳密に比較し、戻り値として扱えて、breakも不要。短くて安全なコードが書けるようになります。
「ユーザーのロールに応じて表示を変える」「ステータスコードに応じてメッセージを出す」——固定値との比較が続く分岐は、switch文を使うと意図が明確になります。if-elseifの羅列より読みやすく、後からケースを追加しやすい構造です。