基礎

PHPのforeach文入門|配列のループ処理

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()で解除する