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 教程。