PHP 配列のループ処理:foreach の使い方

foreach は配列やオブジェクトの要素を順番に処理するためのループ構文です。PHP で配列を扱う際に最もよく使われます。

$fruits = ['apple', 'banana', 'orange'];

foreach ($fruits as $fruit) {
    echo $fruit . "\n";
}
// apple
// banana
// orange

キーと値を取得する

value の形式でキーも同時に取得できます。

$prices = ['apple' => 150, 'banana' => 80, 'orange' => 120];

foreach ($prices as $name => $price) {
    echo "$name: {$price}円\n";
}
// apple: 150円
// banana: 80円
// orange: 120円

通常の配列でも同様にインデックスを取得できます。

$fruits = ['apple', 'banana', 'orange'];

foreach ($fruits as $index => $fruit) {
    echo "$index: $fruit\n";
}
// 0: apple
// 1: banana
// 2: orange

参照渡しで要素を変更する

ループ内で元の配列を変更したい場合は、& を付けて参照渡しにします。

$numbers = [1, 2, 3, 4, 5];

foreach ($numbers as &$num) {
    $num *= 2;
}
unset($num); // 参照を解除

print_r($numbers);
// [2, 4, 6, 8, 10]

ループ後に unset() で参照を解除するのが重要です。解除しないと、後続のコードで $num を使った際に意図しない動作を引き起こす可能性があります。

ネストした配列の処理

多次元配列では foreach をネストするか、分割代入を使います。

$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30]
];

// 分割代入を使う(PHP 7.1+)
foreach ($users as ['name' => $name, 'age' => $age]) {
    echo "$name: $age\n";
}

// 従来の方法
foreach ($users as $user) {
    echo $user['name'] . ': ' . $user['age'] . "\n";
}

ループ制御

break でループを抜け、continue で次の繰り返しにスキップします。

$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

foreach ($numbers as $num) {
    if ($num === 3) {
        continue; // 3 をスキップ
    }
    if ($num === 7) {
        break; // 7 で終了
    }
    echo $num . ' ';
}
// 1 2 4 5 6

ネストしたループで外側のループを制御したい場合は、break 2 のようにレベルを指定できます。