PHP 速習チュートリアル

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;