ZetCode

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 循环,用于遍历数组。

basic_foreach.php
<?php

declare(strict_types=1);

$colors = ['red', 'green', 'blue', 'yellow'];

foreach ($colors as $color) {
    echo "$color ";
}

该代码循环遍历 $colors 数组中的每个元素。在每次迭代中,当前元素的值被分配给 $color。循环继续,直到处理完所有元素。这是最简单的 foreach 用法模式。

带键和值的 foreach 循环

此示例展示了如何在 foreach 循环中访问键和值。

foreach_keys.php
<?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 中使用关联数组至关重要。

修改数组值

此示例演示了在迭代期间修改数组元素。

foreach_modify.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 循环与多维数组一起使用。

foreach_multidimensional.php
<?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。

foreach_control.php
<?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 如何遍历对象属性。

foreach_object.php
<?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 中解构数组。

foreach_list.php
<?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 将每个子数组解构为变量。这提供了一种处理结构化数组数据的简洁方法。变量的数量必须与子数组的结构匹配。解构简化了数组元素的访问。

最佳实践

来源

PHP foreach 文档

本教程涵盖了 PHP foreach 循环,并附带了实际示例,展示了基本迭代、键/值访问、修改和高级用法模式。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 教程