第20回: 配列関数 — ループを書かずにデータを処理する

章: 第2章: 配列とデータ処理

「偶数だけ抽出したい」「全要素を2倍にしたい」——foreachを書かずに解決できます

配列処理のたびに foreach でループを書いていると、コードが長くなりがちです。PHPには配列を短く安全に操作できる関数が豊富に用意されています。array_maparray_filterarray_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基礎シリーズの配列・データ処理は完了です。次は 関数の定義と活用へ進み、処理を再利用可能なかたちにまとめる方法を学びましょう。

Related Articles