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 のようにレベルを指定できます。