PHP foreach ループ
1. 添字配列における PHP foreach ループ
PHP の foreach ループ は、配列の各要素やオブジェクトの各プロパティに対してコードブロックを繰り返し実行するために使用されます。
以下の例では、添字配列(インデックス配列)のすべての項目をループ処理します。
1.1 例:添字配列の項目をループする
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) {
echo "$value <br>";
}解説: ループの各イテレーション(反復)において、現在の配列要素の値が変数 $value に代入されます。この処理は、配列の最後の要素に達するまで継続されます。
2. 連想配列における PHP foreach ループ
先ほどの例は「添字配列」であり、最初の項目のキーは 0、2 番目は 1 というように割り当てられていました。
連想配列(Associative Arrays)は異なり、名前付きのキーを使用します。連想配列をループ処理する場合、値だけでなくキー名も取得したいケースが多いでしょう。
その場合は、以下のように foreach ループ内でキーと値の両方を指定します。
2.1 例:$members 配列からキーと値の両方を出力する
$members = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
foreach ($members as $key => $value) {
echo "$key : $value <br>";
}※配列の詳細については「PHP 配列」の章で詳しく解説します。
3. オブジェクトにおける PHP foreach ループ
foreach ループは、オブジェクト(Object)のプロパティを走査するためにも使用できます。
3.1 例:$myCar オブジェクトのプロパティ名と値を出力する
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
}
$myCar = new Car("red", "Volvo");
foreach ($myCar as $x => $y) {
echo "$x: $y <br>";
}※オブジェクトの詳細については「PHP オブジェクトとクラス」の章を参照してください。
4. PHP break ステートメント
break ステートメントを使用すると、ループが最後に達する前であっても途中で停止させることができます。
4.1 例:$x が "blue" の場合にループを停止する
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") break;
echo "$x <br>";
}5. PHP continue ステートメント
continue ステートメントを使用すると、現在のイテレーションをスキップして、直ちに次のイテレーションへ進むことができます。
5.1 例:$x が "blue" の場合にスキップして次へ進む
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") continue;
echo "$x <br>";
}6. PHP foreach ループにおける参照渡し(Byref)
配列の要素をループ処理する際、デフォルトでは要素に対する変更は元の配列に影響を与えません。
6.1 例:デフォルトでは要素を変更しても元の配列は変わらない
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);しかし、foreach の宣言時に & 記号を使用することで、配列要素を参照渡し(By reference)として割り当てることができます。これにより、要素に対する変更が元の配列にも直接反映されるようになります。
6.2 例:参照渡しを使用して元の配列を変更する
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as &$x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);7. 代替構文 (Alternative Syntax)
foreach ループの構文は、波括弧の代わりに :(コロン)と endforeach ステートメントを使用して記述することも可能です。
7.1 例:添字配列の項目をループする(代替構文)
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) :
echo "$x <br>";
endforeach;