章: 第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つのキーワードです。