章: 第2章: 配列とデータ処理
「偶数だけ抽出したい」「全要素を2倍にしたい」——foreachを書かずに解決できます
配列処理のたびに foreach でループを書いていると、コードが長くなりがちです。PHPには配列を短く安全に操作できる関数が豊富に用意されています。array_map・array_filter・array_reduce を覚えると、データ処理がぐっとシンプルになります。
まずコードを動かしてみる
<?php
$nums = [1, 2, 3, 4];
$evens = array_filter($nums, fn($n) => $n % 2 === 0);
print_r($evens);
array_filter() で偶数だけを抽出しています。foreachを書かずに一行で実現できます。
よく使う配列関数の比較
| 関数 | 役割 | 例 |
array_map($fn, $arr) |
全要素を変換して新配列を返す | 全要素を2倍にする |
array_filter($arr, $fn) |
条件に合う要素だけ残す | 偶数だけ抽出 |
array_reduce($arr, $fn, $init) |
配列をたたみ込んで単一値にする | 合計を求める |
array_keys($arr) |
キーの配列を返す | 連想配列のキー一覧 |
array_values($arr) |
値の配列を返す | 連想配列の値一覧 |
in_array($val, $arr) |
値が含まれるか確認 | 検索 |
array_unique($arr) |
重複を除去 | 一意な値だけ残す |
sort($arr) |
昇順ソート(破壊的) | 数値・文字列の並べ替え |
usort($arr, $fn) |
カスタム比較でソート | 独自ルールで並べ替え |
悪い例(foreachで手続き的に書く)
<?php
$nums = [1, 2, 3, 4, 5];
$doubled = [];
foreach ($nums as $n) {
$doubled[] = $n * 2;
}
良い例(array_mapで宣言的に書く)
<?php
$nums = [1, 2, 3, 4, 5];
$doubled = array_map(fn($n) => $n * 2, $nums);
チェックポイント:
array_filter()は条件に合わない要素を除去しますが、キーはそのまま保持します。元の添字をリセットしたい場合はarray_values()を組み合わせて使いましょう。
array_reduce で合計を求める
<?php
$prices = [100, 250, 80];
$total = array_reduce($prices, fn($carry, $item) => $carry + $item, 0);
echo $total; // 430
まとめ & 次のステップ
array_map()は全要素を変換、array_filter()は条件でフィルタ、array_reduce()は集約- foreach より配列関数のほうが「何をしたいか」の意図がコードに表れやすい
array_filter()後にキーをリセットしたいときはarray_values()を使うin_array()はデフォルトで緩い比較(===で厳密検索するには第3引数にtrue)- 配列関数を組み合わせるだけで、ほとんどのデータ処理が実現できる
この回でPHP基礎シリーズの配列・データ処理は完了です。次は 関数の定義と活用へ進み、処理を再利用可能なかたちにまとめる方法を学びましょう。