PHP foreachループ

foreachループは、配列の各要素またはオブジェクトの各プロパティに対してブロックのコードを繰り返し実行します。

配列に対するforeachループ

最も一般的なforeachループの使用法は、配列の要素を繰り返し処理することです。

インデックス配列の要素を繰り返し処理します:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $x) {
  echo "$x <br>";
}

ヒント

foreachループでは、配列の各要素に対してコードが繰り返し実行されます。

キーと値

上記の配列はインデックス配列であり、最初の要素のキーは0、2番目の要素のキーは1といった具合です。

連想配列は異なり、連想配列ではキーに名前を割り当て、連想配列を繰り返し処理する際にキーと値の両方を保持したい場合があります。

次のように、foreachの定義でキーと値の両方を指定することができます:

$members配列からキーと値の両方を出力します:


$members = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

foreach ($members as $x => $y) {
  echo "$x : $y <br>";
}

オブジェクトに対するforeachループ

foreachループは、オブジェクトのプロパティを繰り返し処理するためにも使用できます。

$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>";
}

break文

break文を使用すると、ループを強制的に終了させることができます:

$xが”blue”の場合、ループを終了します:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $x) {
  if ($x == "blue") break;
  echo "$x <br>";
}

continue文

continue文を使用すると、現在の反復処理を中断し、次の反復処理に進むことができます:

$xが”blue”の場合、現在の反復処理を中断し、次の反復処理に進みます:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $x) {
  if ($x == "blue") continue;
  echo "$x <br>";
}

Byrefオプション

配列の要素を繰り返し処理する際、デフォルトでは配列の要素に対して行った変更はオリジナルの配列に影響しません:

デフォルトでは、配列の要素の変更はオリジナルの配列に影響しません:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $x) {
  if ($x == "blue") $x = "pink";
}

var_dump($colors);

しかし、foreach宣言で&文字を使用することで、配列の要素を参照で割り当てることができ、要素への変更がオリジナルの配列にも反映されます:

&文字を使用して配列の要素を参照で割り当て、変更をオリジナルの配列に反映します:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as &$x) {
  if ($x == "blue") $x = "pink";
}

var_dump($colors);

Alternative Syntax

foreachループの構文は、endforeach文を使用して次のように記述することもできます:

インデックス配列の要素を繰り返し処理します:


$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $x) :
  echo "$x <br>";
endforeach;