PHP foreach 循环
最后修改于 2025 年 4 月 16 日
PHP foreach
循环提供了一种简单的方法来遍历数组。它仅适用于数组和对象,会自动遍历每个元素。foreach 结构是 PHP 中数组操作的关键。
基本定义
foreach
循环有两种语法形式。第一种遍历数组的值,而第二种提供键和值。它会在循环前自动重置数组指针。
语法:foreach ($array as $value) { code }
仅用于值。foreach ($array as $key => $value) { code }
用于键和值。循环变量的作用域仅限于循环体。
默认情况下,foreach 循环是只读的,但使用引用时可以修改数组元素。它通常比传统的 for 循环更安全、更易于阅读,用于数组迭代。
基本 foreach 循环
此示例演示了一个简单的 foreach 循环,用于遍历数组。
<?php declare(strict_types=1); $colors = ['red', 'green', 'blue', 'yellow']; foreach ($colors as $color) { echo "$color "; }
该代码循环遍历 $colors
数组中的每个元素。在每次迭代中,当前元素的值被分配给 $color
。循环继续,直到处理完所有元素。这是最简单的 foreach 用法模式。
带键和值的 foreach 循环
此示例展示了如何在 foreach 循环中访问键和值。
<?php declare(strict_types=1); $capitals = [ 'France' => 'Paris', 'Germany' => 'Berlin', 'Italy' => 'Rome' ]; foreach ($capitals as $country => $capital) { echo "The capital of $country is $capital\n"; }
该代码遍历一个关联数组,其中键是国家名称,值是首都。$country => $capital
语法捕获两者。这种形式对于在 PHP 中使用关联数组至关重要。
修改数组值
此示例演示了在迭代期间修改数组元素。
<?php declare(strict_types=1); $numbers = [1, 2, 3, 4, 5]; foreach ($numbers as &$number) { $number *= 2; } print_r($numbers);
该代码使用引用 (&
) 将数组中的每个值加倍。引用允许修改原始数组元素。循环后,数组包含 [2, 4, 6, 8, 10]。应谨慎使用引用。
带多维数组的 foreach
此示例展示了如何将嵌套的 foreach 循环与多维数组一起使用。
<?php declare(strict_types=1); $matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; foreach ($matrix as $row) { foreach ($row as $cell) { echo "$cell "; } echo "\n"; }
外层循环遍历 2D 数组的每一行。内层循环处理当前行中的每个元素。此模式适用于任何深度的数组。嵌套的 foreach 循环在处理复杂的数据结构时很常见。
中断和继续
此示例演示了在 foreach 循环中使用 break 和 continue。
<?php declare(strict_types=1); $values = [10, 20, 30, 40, 50, 60]; foreach ($values as $value) { if ($value == 30) { continue; } if ($value == 50) { break; } echo "$value "; }
该代码使用 continue
跳过值 30,并使用 break
在 50 处停止。只会打印 10、20 和 40。这些控制语句与其他循环中的工作方式相同。它们在 foreach 迭代中提供流程控制。
带对象迭代的 foreach
此示例展示了 foreach 如何遍历对象属性。
<?php declare(strict_types=1); class Book { public $title = 'PHP Guide'; public $author = 'John Doe'; public $price = 29.99; } $book = new Book(); foreach ($book as $property => $value) { echo "$property: $value\n"; }
该代码遍历 Book 对象的所有公共属性。每个属性名称和值都会被打印出来。对象必须实现 Traversable 接口才能实现自定义迭代行为。默认情况下,foreach 与公共属性一起使用。
使用 list 与 foreach
此示例演示了使用 list
在 foreach 中解构数组。
<?php declare(strict_types=1); $people = [ ['John', 'Doe', 30], ['Jane', 'Smith', 25], ['Bob', 'Johnson', 45] ]; foreach ($people as list($firstName, $lastName, $age)) { echo "$firstName $lastName is $age years old\n"; }
该代码使用 list
将每个子数组解构为变量。这提供了一种处理结构化数组数据的简洁方法。变量的数量必须与子数组的结构匹配。解构简化了数组元素的访问。
最佳实践
- 参考: 在修改数组后取消引用变量。
- 性能: Foreach 通常比使用数组的 for 循环更快。
- 可读性: 为键/值使用有意义的变量名。
- 安全性: 避免在迭代期间修改数组结构。
- 类型提示: 对 foreach 参数使用可迭代的类型提示。
来源
本教程涵盖了 PHP foreach 循环,并附带了实际示例,展示了基本迭代、键/值访问、修改和高级用法模式。
作者
列出 所有 PHP 教程。