php 的 continue 实际跳转到当前循环体末尾再执行条件判断或增量步骤;必须加分号,否则会将后续语句误作层数参数;switch 中慎用,因其语义易混淆;多层跳转需确保外层循环层数足够且作用域有效。

PHP 的 continue 不是“跳到下一次循环开头”,而是“跳到当前循环体末尾,再走条件判断或增量步骤”——这个细微差别直接决定你是否写出逻辑错乱的代码。
continue 后面必须加分号,否则会意外执行后续语句
这是最常踩的坑:漏掉分号会让 PHP 把 continue 和紧跟着的语句(比如 echo)当成一个整体表达式,echo 的返回值(1)会被当作 continue 的层数参数,导致完全相反的行为。
- 错误写法:
if ($i == 2) continue echo "$i\n";→ 实际输出2(只在 $i==2 时执行echo) - 正确写法:
if ($i == 2) continue;+ 换行写echo "$i\n"; - PHP 5.4+ 已禁止
continue 0和变量传参(如$n = 2; continue $n;),别试
continue 3 这类多层跳转只在嵌套循环里生效,switch 里用要小心
PHP 把 switch 当作“伪循环结构”,所以 continue 能用,但语义容易混淆:它不会跳出 switch,而是跳到包裹它的那个循环末尾。如果 switch 在 for 里,continue 就等价于 break(但会触发 E_WARNING);如果写 continue 2,才真正跳到外层循环。
- 常见误用:在
switch里写continue想代替break→ PHP 7.3+ 会报E_WARNING - 安全做法:
switch内部一律用break,多层跳转只在明确的for/while嵌套中用continue N -
continue 3要求外层至少有三层循环,少一层就 fatal error
foreach 中用 continue 跳过元素,注意键值判断逻辑
在 foreach 里 continue 最典型用途是过滤数据,但键类型(数字/字符串)、取模运算、相等判断方式稍有不慎就会漏掉或误删。
- 想跳过偶数索引:
if (0 === ($key % 2)) continue;(用===防止字符串键被转成 0) - 想跳过空值:
if (empty($value)) continue;,但注意0、"0"、false也会被跳过 - 避免用
continue替代数组过滤函数(如array_filter),纯逻辑处理用continue更轻量,批量数据清洗用函数更清晰
真正难的不是语法,而是当你在五层嵌套里写 continue 4 时,得同时确认:外层有没有四层循环、每层是否都还在作用域内、有没有被 break 提前中断过——这些没法靠 IDE 提示,只能靠缩进对齐和加注释来防错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











