PHP 简明教程

PHP foreach 循环

1. PHP foreach 循环遍历索引数组

PHP foreach 循环专门用于遍历数组中的每个元素或对象中的每个属性,并为其执行一段指定的代码块。
以下示例展示了如何遍历索引数组(Indexed Arrays)中的所有项目:

示例

遍历索引数组的各个元素:

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

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

解释: 在每一次的循环迭代中,当前数组元素的值都会被赋给变量 $value。循环会一直持续进行,直至到达数组的最后一个元素。

2. PHP foreach 循环遍历关联数组

上面例子中的数组是一个索引数组,其中第一项的键(key)为 0,第二项的键为 1,依此类推。

关联数组(Associative Arrays)则有所不同。关联数组使用的是开发者自定义的命名键,当您遍历它们时,通常会希望同时获取键名和其对应的值。

这可以通过在 foreach 循环的声明中同时指定键和值来实现,如下所示:

示例

$members 数组中同时打印出键(key)和值(value):

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

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

您将在后续的 PHP 数组章节中学习到更多关于数组的知识。

3. PHP foreach 循环遍历对象

foreach 循环同样可以用于遍历对象(Objects)的各个公共属性:

示例

打印出 $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 语句,即使 foreach 循环还未遍历完所有元素,我们也可以强行中断并跳出循环:

示例

如果 $x 的值为 "blue",则停止循环:

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

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

5. PHP continue 语句

使用 continue 语句,我们可以直接跳过当前轮次的迭代,并继续执行下一次迭代:

示例

如果 $x 的值为 "blue",则跳过本次打印并直接进入下一次迭代:

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

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

6. PHP foreach 循环与引用传递 (Byref)

在遍历数组元素时,默认情况下,对循环内部数组元素所做的任何更改都不会影响到原始数组:

示例

默认情况下,更改元素的值不会影响原数组:

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

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

var_dump($colors);

但是,通过在 foreach 的变量声明中使用 & 字符,数组元素将被按引用传递(assigned by reference)。这意味着对该数组元素所做的任何更改,都会直接同步修改原始数组中的数据:

示例

通过按引用传递数组元素,修改操作将直接影响原数组:

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

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

var_dump($colors);

7. 替代语法 (Alternative Syntax)

foreach 循环的语法也可以通过使用 endforeach 语句来进行替代编写,效果是完全一样的:

示例

使用替代语法遍历索引数组中的元素:

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

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