第15回: foreach文 — 配列を走査するなら、これがいちばんシンプル

章: 第1章: 文法の土台

配列の全要素を処理したいとき、添字管理で失敗した経験はありませんか?

for文で配列を走査するとき、$i < count($array) の条件を書き忘れたり、添字を1つずらしてしまったりするミスが起きやすいです。foreach文を使えば添字の管理が不要になり、配列処理のバグを大幅に減らせます。

まずコードを動かしてみる


<?php
$fruits = ['apple', 'banana', 'orange'];
foreach ($fruits as $fruit) {
    echo $fruit . PHP_EOL;
}

foreach ($配列 as $値) のシンプルな構文で、配列のすべての要素を順番に取り出せます。

foreach文の使い分けパターン

パターン 書き方 用途
値だけ foreach ($arr as $val) 値だけ使う場合
キーと値 foreach ($arr as $key => $val) 連想配列・キーも使う場合
参照渡し foreach ($arr as &$val) 配列の値を変更したい場合

悪い例(for文で配列を走査——添字エラーのリスク)


<?php
$fruits = ['apple', 'banana', 'orange'];
for ($i = 0; $i <= count($fruits); $i++) { // <= はバグ(境界値エラー)
    echo $fruits[$i];
}

良い例(foreach文で安全に走査)


<?php
$fruits = ['apple', 'banana', 'orange'];
foreach ($fruits as $index => $fruit) {
    echo "{$index}: {$fruit}" . PHP_EOL;
}

チェックポイント: 参照渡し(&$val)を使った後は unset($val) でループ変数を解除しましょう。解除しないと、ループ後に最後の要素への参照が残り、別の変数操作で配列が書き換わるバグが発生します。

連想配列のforeach


<?php
$user = ['name' => 'Ken', 'age' => 28, 'city' => 'Tokyo'];
foreach ($user as $key => $value) {
    echo "{$key}: {$value}" . PHP_EOL;
}

まとめ & 次のステップ

  • foreach文は配列のすべての要素を走査する最もシンプルな方法
  • 添字管理が不要なためfor文より安全に配列を処理できる
  • $key => $value の形でキーと値を同時に取得できる
  • 参照渡し &$val を使ったあとは unset($val) を忘れずに
  • 配列の走査に for文を使うのは「インデックスを明示的に操作したい場合」に限定する

次回は break と continueを学びます。ループの流れを柔軟にコントロールする2つのキーワードです。

Related Articles