foreach文は、配列やオブジェクトの全要素を順番に処理するためのループ構文です。for文と違い、カウンタ変数を管理する必要がなく、配列の処理に最適化されています。
基本的な使い方
構文
foreach ($配列 as $値) {
// 各要素に対する処理
}
foreach ($配列 as $キー => $値) {
// キーと値の両方を使う場合
}
PHP
<?php
$fruits = ["りんご", "バナナ", "みかん", "ぶどう"];
// 値だけを取得
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
echo "---<br>";
// キー(インデックス)と値を取得
foreach ($fruits as $index => $fruit) {
echo "{$index}: {$fruit}<br>";
}
?>
実行結果
りんご
バナナ
みかん
ぶどう
---
0: りんご
1: バナナ
2: みかん
3: ぶどう
連想配列のループ
連想配列では $key => $value の形でキーと値を取得できます。
PHP
<?php
$user = [
"name" => "太郎",
"age" => 25,
"email" => "taro@example.com"
];
foreach ($user as $key => $value) {
echo "{$key}: {$value}<br>";
}
?>
実行結果
name: 太郎
age: 25
email: taro@example.com
参照渡しで要素を変更
PHP
<?php
$prices = [100, 200, 300];
// &を付けると元の配列の要素を直接変更できる
foreach ($prices as &$price) {
$price = (int)($price * 1.1); // 10%値上げ
}
unset($price); // 参照を解除(重要!)
print_r($prices); // [110, 220, 330]
?>
参照渡しの後はunset()必須
foreachで&$priceのように参照渡しを使った後は、必ずunset($price)で参照を解除してください。解除しないとループ後に予期しないバグが起きます。
foreachとfor文の使い分け
配列の全要素を処理する場合はforeachを使いましょう。インデックスで特定の範囲だけ処理したい場合や、逆順で処理したい場合はfor文が適しています。
まとめ
foreachは配列の全要素を順番に処理するループ構文as $key => $valueでキーと値の両方を取得できる&を付けると元の配列を直接変更でき、使用後はunset()で解除する