首页 / PHP 入门教程 / PHP 循环结构

PHP 入门教程

PHP 循环结构

本教程共 65 篇 · 第 12 篇 · 更新于 2026-07-24 · 约 4 分钟阅读

PHPPHP8循环whileforforeach遍历

12. PHP 循环结构

本节目标:掌握四种循环语句和跳转控制。学完你能重复执行代码块,处理批量数据。

12.1 while 循环

只要条件成立,就重复执行代码:

<?php
$i = 1;

while ($i <= 5) {
    echo "第 $i 次循环\n";
    $i++;
}
?>

输出:

第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
第 5 次循环
Tip

确保循环条件最终会变为 false,否则会造成无限循环

12.2 do…while 循环

先执行一次代码,再判断条件:

<?php
$i = 1;

do {
    echo "第 $i 次循环\n";
    $i++;
} while ($i <= 5);
?>

与 while 的区别:do…while 至少执行一次

<?php
$i = 10;

// while:条件不成立,一次都不执行
while ($i < 5) {
    echo "while 不会输出";
}

// do...while:先执行一次,再判断
do {
    echo "do...while 会输出一次";  // 这行会执行
} while ($i < 5);
?>

12.3 for 循环

for 循环适合已知循环次数的场景:

<?php
// 语法:for (初始化; 条件; 增量)
for ($i = 0; $i < 5; $i++) {
    echo "序号: $i\n";
}
?>

执行过程:

  1. $i = 0 —— 初始化(只执行一次)
  2. $i < 5 —— 判断条件,成立则执行循环体
  3. echo —— 执行循环体
  4. $i++ —— 执行增量
  5. 回到第 2 步,直到条件不成立

多重 for 循环

<?php
// 打印九九乘法表
for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        echo "$j x $i = " . ($i * $j) . "\t";
    }
    echo "\n";
}
?>

12.4 foreach 循环

foreach 是遍历数组的首选方式:

<?php
$fruits = ["苹果", "香蕉", "橙子"];

// 只取值
foreach ($fruits as $fruit) {
    echo "$fruit\n";
}

// 取键和值
$scores = ["张三" => 85, "李四" => 92, "王五" => 78];
foreach ($scores as $name => $score) {
    echo "$name: $score\n";
}
?>
Tip

foreach 遍历的是数组的副本,循环内修改 $fruit 不会改变原数组。要修改原数组,用引用 &

<?php
$nums = [1, 2, 3];
foreach ($nums as &$num) {
    $num *= 2;  // 原数组变为 [2, 4, 6]
}
unset($num);  // 重要!取消引用,避免后续误操作
?>

12.5 break 语句

break 立即终止整个循环:

<?php
// 找到第一个大于 50 的数
$numbers = [10, 25, 60, 80, 30];

foreach ($numbers as $num) {
    if ($num > 50) {
        echo "找到了: $num";
        break;  // 跳出循环
    }
}
?>

break 可以指定跳出几层循环:

<?php
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        if ($i == 1 && $j == 1) {
            break 2;  // 跳出两层循环
        }
        echo "i=$i, j=$j\n";
    }
}
?>

12.6 continue 语句

continue 跳过当前迭代,继续下一次:

<?php
// 只输出奇数
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 == 0) {
        continue;  // 偶数跳过
    }
    echo "$i ";  // 1 3 5 7 9
}
?>

12.7 循环的选择建议

场景推荐循环
不确定次数,条件驱动while
至少执行一次do…while
已知次数的计数循环for
遍历数组或对象foreach
<?php
// 遍历数组:foreach 最清晰
$users = ["张三", "李四", "王五"];
foreach ($users as $user) {
    echo $user;
}

// 固定次数:for 最直观
for ($i = 0; $i < 3; $i++) {
    echo $users[$i];
}

// 读取文件直到末尾:while 最合适
while (!feof($file)) {
    $line = fgets($file);
    echo $line;
}
?>

12.8 循环中的常见陷阱

<?php
// 陷阱 1:无限循环
// for ($i = 0; $i >= 0; $i++) {
//     echo "永远不会停止";
// }

// 陷阱 2:循环内修改数组
$arr = [1, 2, 3];
foreach ($arr as $v) {
    // 不要在循环内添加/删除数组元素
    // $arr[] = $v * 2;  // 可能导致意外行为
}

// 陷阱 3:引用后未 unset
foreach ($arr as &$val) {
    $val *= 2;
}
// unset($val);  // 如果注释掉这行,下面的 $val 会意外修改 $arr 最后一个元素
foreach ($arr as $val) {
    // ...
}
?>

来源:参考了 w3cschool「PHP while 循环」「PHP for 循环」、runoob「PHP While 循环」「PHP For 循环」以及 php.net 官方文档,综合改写后所得。