← PHP Break语句:精准控制循环与Switch的退出时机 PHP控制语句:掌握程序流程的决策权 →

PHP Continue语句:跳过本轮循环,优雅地控制迭代节奏

原创 2026-05-09 PHP 已有人查阅

上一节我们聊了break,它的作用是“彻底退出循环”。但在编码中,还有另一种常见的需求:不是想退出整个循环,而是想在某一轮循环中,跳过后面那些代码不执行,直接开始下一轮迭代。 这种“跳过不退出”的控制,就是continue语句的职责。

continue的工作方式和break形成鲜明对比:break是“我不干了,走了”;continue是“这一轮我不做后面的活了,下一轮继续”。理解这对兄弟的区别,是用好PHP流程控制的关键一步。

continue可用在forwhiledo-whileforeach这四种循环结构中,也能在switch内部配合循环使用。它让开发者能够对循环体内的代码执行进行更精细的管理——满足特定条件时,下面的代码就别跑了,直接跳去下一轮条件判断。

基本语法

continue的语法和break几乎一样简单,本身就是一个独立的跳转语句。

continue;

它也支持一个可选的数字参数:continue N;。这个N表示跳出的层数,专门用于嵌套循环场景。比如在双层嵌套循环的内层写continue 2;,会直接跳到外层循环的下一轮迭代。大部分时候我们用不带参数的continue就够了,但知道有这个选项,处理复杂嵌套时心里有底。

本节课程知识要点

使用continue时,这几个细节会直接影响你代码的正确性,值得认真对待。

  • continuebreak的语义区别要刻在脑子里break是终止整个循环;continue是终止本轮循环的剩余代码,进入下一轮。搞混它们,逻辑跑偏。

  • 在使用whiledo-while时,continue的位置要格外小心。如果在continue之前你没有正确地递增计数器,很可能会造成无限循环。因为continue一跳,后面的$i++就不执行了,条件不变,循环就卡死了。这个坑,forforeach都没有,因为它们自己管理迭代变量。

  • continueforeach里同样实用。处理数组时,可以根据元素值决定要不要跳过某个元素。配合条件判断,可以写出很干净的过滤逻辑。

  • 别过度依赖continue来补救糟糕的条件结构。如果你发现自己的循环体里塞了大量continue来跳过各种情况,可能需要重新审视一下:是不是应该把循环条件设计得更合理,或者把那段逻辑拆成更小的函数。continue是工具,不是遮羞布。

For循环中的Continue实例

for循环是使用continue比较安全的结构,因为计数器递增写在头部,不受continue影响。

1. 跳过特定数字

这是一个很基础的演示:循环从1到5,但跳过数字3。

<?php
for ($num = 1; $num <= 5; $num++) {
    if ($num == 3) {
        continue; // 遇到3,跳过下面的echo,直接$num++进入下一轮
    }
    echo $num . "<br/>";
}
?>

输出结果:

1
2
4
5

3被跳过了。流程分析:$num从1到5逐个迭代,当$num等于3时,if条件成立,continue执行,它后面那行echo被跳过,直接回到循环头部的$num++$num变成4,继续下一轮。

2. 只输出奇数,跳过偶数

这个例子用取模运算配合continue来筛选数值。

<?php
for ($num = 1; $num <= 10; $num++) {
    if ($num % 2 == 0) {
        continue; // 偶数就跳过,不输出
    }
    echo $num . " ";
}
?>

输出:1 3 5 7 9。任何能使$num % 2 == 0成立的值(偶数)都会触发continue,跳过echo

个人经验分享:有些开发者喜欢在这种筛选场景里用if-else把要执行的代码包起来,而不是用continue。两种写法都能工作,但我个人偏好:当“跳过条件”非常清晰简单时,用continue加反转条件,可以让主体代码的缩进层级更浅。代码的“主流程”保持在最外层,读起来更顺畅。如果跳过的逻辑本身就很复杂,那用if-else包裹主体代码可能更清楚。选择哪种,看具体情况。

3. 嵌套循环中利用Continue过滤配对

下面是continue在嵌套循环里的应用,只输出内层外层变量值不同的组合。

<?php
// 外层循环
for ($x = 1; $x <= 3; $x++) {
    // 内层循环
    for ($y = 1; $y <= 3; $y++) {
        if ($x == $y) {
            continue; // 两个变量相等时跳过,只保留不同的配对
        }
        echo "组合:{$x} 和 {$y}<br/>";
    }
}
?>

输出结果:

组合:1 和 2
组合:1 和 3
组合:2 和 1
组合:2 和 3
组合:3 和 1
组合:3 和 2

11、22、33这三对相等的组合被continue过滤掉了,没有出现在结果中。

While循环中的Continue实例

while循环里用continue,需要自己管理计数器的递增,不然容易掉进无限循环的坑。

1. 输出1到20之间的偶数

这个例子演示用whilecontinue筛选偶数。

<?php
echo "1到20之间的偶数:<br/>";
$counter = 1;
while ($counter <= 20) {
    if ($counter % 2 == 1) {
        $counter++; // 先递增计数器!
        continue;   // 然后跳过本轮
    }
    echo $counter . " ";
    $counter++;
}
?>

输出:2 4 6 8 10 12 14 16 18 20

注意那句$counter++出现在continue之前。这是用while配合continue的关键。如果漏掉它,当$counter是奇数时,continue直接跳到while的条件检查,$counter是那个奇数,条件成立,循环不停。主观建议:如果你刚开始接触代码号学习编程,在whiledo-while里用continue,每次写完都下意识检查一下——在continue可能触发的路径上,计数器有没有机会推进?养成这个习惯能少踩坑。

2. 从10倒数,只输出偶数

递减循环同样适用。

<?php
$num = 10;
while ($num >= 1) {
    if ($num % 2 != 0) {
        $num--;
        continue;
    }
    echo $num . " ";
    $num--;
}
?>

输出:10 8 6 4 2

3. 跳过3的倍数

<?php
$num = 1;
while ($num <= 15) {
    if ($num % 3 == 0) {
        $num++;
        continue;
    }
    echo $num . " ";
    $num++;
}
?>

输出:1 2 4 5 7 8 10 11 13 14。所有3的倍数(3, 6, 9, 12, 15)都被跳过了。

Foreach循环中的Continue实例

foreach没有手动管理计数器的困扰,使用continue比较不容易出错。

<?php
// 一个包含特殊标记的数组
$taskList = ["写代码", "开会", "休息", "测试", "跳过的任务", "部署上线"];

foreach ($taskList as $task) {
    if ($task == "跳过的任务") {
        continue; // 遇到这个标记就跳过,不输出
    }
    echo "执行任务:{$task}<br/>";
}
?>

输出:

执行任务:写代码
执行任务:开会
执行任务:休息
执行任务:测试
执行任务:部署上线

“跳过的任务”这个元素被continue过滤掉了,数组里的其他元素正常输出。

Continue的可选参数:跳出多层嵌套

continue后面可以跟一个数字,指定要跳到哪一层循环的下一轮。这是比较少用的特性,但在深层嵌套的特定场景下,它有它的价值。

continue 1等同于不带参数的continue,只影响当前所在的那层循环。

<?php
for ($a = 1; $a <= 3; $a++) {
    for ($b = 1; $b <= 3; $b++) {
        if ($a == $b) {
            continue 1; // 只跳过内层循环的本轮,和外层无关
        }
        echo "{$a} - {$b}<br/>";
    }
}
?>

输出的是所有$a不等于$b的组合,和外层的continue示例效果一致。continue 1显式声明了只作用于内层。

如果把参数改成2:continue 2;,它会在内层触发时,直接跳到外层循环的下一轮迭代,内层循环剩下的迭代和外层本轮后续迭代全都跳过。这个功能在日常开发中使用频率较低,但当你维护别人的遗留代码时,有可能遇到它。了解它的意思,不至于看不懂。

continue语句的存在,让循环体内部的条件控制变得更灵活。你不需要用大的if-else把正常逻辑全包起来来避开异常情况;一个条件判断加上continue,就能把不符合要求的迭代干净地截断,让主体代码保持平铺直叙的结构。把break(退出整个循环)和continue(跳过本轮迭代)这对概念放在一起理解透彻,PHP流程控制里循环部分的基础就算比较扎实了。

← PHP Break语句:精准控制循环与Switch的退出时机 PHP控制语句:掌握程序流程的决策权 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号