先说结论:
break:彻底终止整个循环,直接跳到循环外面且后面的语句继续执行。continue:跳过当前循环的剩余代码,立刻开始下一次循环。
也就是 break 后,不会再执行任何循环代码了!而 continue 只是中止当前这次循环,仍然继续循环(直接开始下一次循环)!
1. break 语句
break 用于立即退出当前所在的 for、foreach、while、do-while 或者 switch 结构。
作用: 当满足某个条件时,完全终止循环,不再执行循环中任何后续的迭代。
示例:在数组中查找一个数字,找到后立即停止循环
$numbers = [10, 20, 30, 40, 50];
$searchFor = 30;
$found = false;
foreach ($numbers as $number) {
echo "正在检查: $number\n"; // 这会打印 10, 20, 30
if ($number == $searchFor) {
$found = true;
echo "找到了!\n";
break; // 找到后立即跳出整个 foreach 循环
}
}
if ($found) {
echo "数字 $searchFor 在数组中。";
} else {
echo "数字 $searchFor 不在数组中。";
}
输出:
正在检查: 10 正在检查: 20 正在检查: 30 找到了! 数字 30 在数组中。
可以看到,一旦找到数字 30,break 语句执行,循环立刻结束,后面的 40 和 50 都不会再被检查。
break 的可选参数:
从 PHP 5.4 开始,break 可以接受一个可选的数字参数,表示要跳出多少层循环。默认是 1(只跳出当前一层循环)。
// 跳出多层嵌套循环的例子
for ($i = 0; $i < 5; $i++) {
for ($j = 0; $j < 5; $j++) {
if ($j == 3) {
break 2; // 直接跳出 2 层循环(即跳出 $i 和 $j 两个循环)
}
echo "i = $i, j = $j\n";
}
}
// 当 $j 等于 3 时,整个循环结构都会终止。
2. continue 语句
continue 用于跳过当前循环体中剩余的语句,并立即进行下一次循环的条件判断(如果是 for 循环,则会先执行迭代表达式,如 $i++)。
作用: 当满足某个条件时,不想执行本次循环剩下的代码,而是直接进入下一轮循环。
示例:打印 1 到 10 之间的所有奇数
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) { // 如果 $i 是偶数
continue; // 跳过本次循环中后面的 echo 语句,直接开始 $i++ 和下一次循环
}
echo $i . " "; // 只有奇数才会执行到这里
}
输出:
1 3 5 7 9
当 $i 是偶数时,continue 被执行,echo 语句被跳过,循环直接进入 $i++ 并开始判断 $i <= 10,准备下一次迭代。
continue 的可选参数:
和 break 类似,continue 也可以接受一个数字参数,表示要跳过多少层循环的剩余部分。默认是 1(只跳过当前一层循环的本次迭代)。
// continue 在多层循环中的例子
$i = 0;
while ($i++ < 5) {
echo "外层循环: $i\n";
while (true) {
echo " 内层循环\n";
continue 2; // 跳过 2 层循环的剩余部分,直接开始外层循环的下一次迭代
echo "这行永远不会被执行。";
}
echo "这行也不会被执行。";
}
在这个例子中,continue 2 会直接结束当前内层循环的本次迭代和外层循环的本次迭代,直接开始外层循环的下一次($i++)。
总结与对比
| 特性 | break |
continue |
|---|---|---|
| 核心作用 | 终止整个循环 | 跳过本次循环的剩余代码 |
| 循环流程 | 立即退出,执行循环之后的语句 | 立即开始下一次循环迭代 |
| 可选参数 | break n; 跳出 n 层嵌套循环 |
continue n; 跳过 n 层循环的本次迭代 |
| 适用场景 | 搜索任务(找到即停止)、发生错误需终止 | 过滤数据(忽略某些值)、满足条件无需后续操作 |

微信扫一扫
支付宝扫一扫 