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";
}
?>
执行过程:
$i = 0—— 初始化(只执行一次)$i < 5—— 判断条件,成立则执行循环体echo—— 执行循环体$i++—— 执行增量- 回到第 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";
}
?>
Tipforeach 遍历的是数组的副本,循环内修改
$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 官方文档,综合改写后所得。