PHP: 循环结构
计算机最擅长的就是重复劳动。循环让你用几行代码重复执行成百上千次操作——生成表格、遍历用户列表、计算总和——全都不在话下。
1. while 循环
只要条件为 true 就一直重复执行。先判断,后执行。
PHP
<?php
$i = 1;
while ($i <= 5) {
echo "第 {$i} 次<br>";
$i++;
}
// 输出第1次到第5次
?>
流程图:
TEXT
📖 仅展示
初始化 → [条件判断] → true → 执行循环体 → 更新变量 → 回到判断
↓ false
退出
⚠️ 注意: 如果条件永远为 true,就会造成死循环,程序卡死。每次写 while 前确认:循环里面有让条件最终变 false 的代码吗?
2. do...while 循环
和 while 的唯一区别:先执行一次,再判断。 保证循环体至少执行一次。
PHP
<?php
$i = 10;
do {
echo "执行了!<br>";
$i++;
} while ($i < 5);
// 即使条件一开始就是 false,也会输出一次"执行了!"
?>
| while | do...while | |
|---|---|---|
| 判断时机 | 先判断后执行 | 先执行后判断 |
| 至少执行? | ❌ 可能 0 次 | ✅ 至少 1 次 |
| 使用频率 | 常用 | 较少 |
3. for 循环
for 把初始化、条件判断、变量更新写在一起,是循环中最常用的:
PHP
<?php
for ($i = 1; $i <= 5; $i++) {
echo "第 {$i} 次<br>";
}
// 输出 1 到 5
?>
三个部分:
PHP
for (初始化; 条件; 每次执行后的操作) {
// 循环体
}
▶ 示例:用 for 循环输出乘法表
PHP
<?php
echo "<table border='1'>";
for ($i = 1; $i <= 9; $i++) {
echo "<tr>";
for ($j = 1; $j <= $i; $j++) {
echo "<td>{$j}×{$i}=" . ($i * $j) . "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
4. foreach 循环
foreach 是 PHP 最独特的循环——专门用来遍历数组,语法简洁到让人上瘾:
PHP
<?php
// 遍历索引数组(只要值)
$fruits = ["苹果", "香蕉", "橘子"];
foreach ($fruits as $fruit) {
echo "{$fruit}<br>";
}
// 遍历关联数组(键+值)
$user = [
"name" => "小明",
"age" => 25,
"city" => "北京"
];
foreach ($user as $key => $value) {
echo "{$key}: {$value}<br>";
}
// name: 小明
// age: 25
// city: 北京
?>
💡 提示:
foreach 是 PHP 中用得最多的循环。记两个模式:foreach ($arr as $val) 只要值;foreach ($arr as $key => $val) 要键和值。
5. break 与 continue
| 关键字 | 作用 |
|---|---|
break |
立即跳出整个循环,不再执行 |
continue |
跳过当前这一轮的剩余代码,进入下一轮 |
▶ 示例:break 和 continue
PHP
<?php
// break:到 5 就停
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break; // 跳出循环
}
echo $i . " ";
}
// 输出: 1 2 3 4
// continue:跳过 5
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
continue; // 跳过本次
}
echo $i . " ";
}
// 输出: 1 2 3 4 6 7 8 9 10
?>
💡 提示:
break 2; 可以跳出两层嵌套循环,continue 2; 跳过外层循环的当前轮。后面的数字代表跳出/跳过的层数。
6. 循环与 HTML 混写
替代语法让循环在 HTML 模板中更美观:
▶ 示例:用 foreach 生成 HTML 列表
PHP
<?php
$students = [
["name" => "张三", "score" => 92],
["name" => "李四", "score" => 85],
["name" => "王五", "score" => 78],
["name" => "赵六", "score" => 95],
];
?>
<table border="1">
<tr>
<th>姓名</th>
<th>分数</th>
<th>评级</th>
</tr>
<?php foreach ($students as $s): ?>
<tr>
<td><?= $s['name'] ?></td>
<td><?= $s['score'] ?></td>
<td>
<?php if ($s['score'] >= 90): ?>
🌟 优秀
<?php elseif ($s['score'] >= 80): ?>
👍 良好
<?php else: ?>
📚 继续努力
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
这个例子展示了 PHP 的核心魔力——用几行代码把数组数据变成完整的 HTML 表格。
7. 选择合适的循环
| 场景 | 推荐循环 |
|---|---|
| 遍历数组 | foreach |
| 固定次数(如 1 到 10) | for |
| 不确定次数但知道条件 | while |
| 需要至少执行一次 | do...while(但很少用) |
| 嵌套遍历二维数组/表格 | for 嵌套 或 foreach 嵌套 |
💡 提示: PHP 编程中,
foreach 是绝对主力(遍历数组的场景太多),其次 for(计数循环),while 用的一般是读文件/数据库结果集时,do...while 极少用。
❓ 常见问题
Q for 循环的
$i++ 和 $i += 2 有什么区别?A
$i++ 每次加 1(递增 1),$i += 2 每次加 2(步长为 2)。后者可以用来输出奇数/偶数。Q foreach 和 for 什么时候用哪个?
A foreach 只用来遍历数组和对象,语法更简洁。for 适合需要精确控制索引和步长的计数循环。
Q PHP 中 foreach 修改原数组会怎样?
A 默认情况下
foreach ($arr as $val) 操作的是副本,修改 $val 不影响原数组。但如果 $val 前面加 &(引用传递),修改会影响原数组。这个话题在第12课函数进阶中会详细讲。📖 小节
while先判断后执行,条件不满足可能一次都不执行do...while先执行后判断,至少执行一次for把初始化、条件、更新写在一起,最适合固定次数循环foreachPHP 最常用循环,遍历数组极简:$arr as $val、$arr as $key => $valbreak跳出循环,continue跳过本轮- 替代语法(
for (): ... endfor;/foreach (): ... endforeach;)让 HTML 混写更清晰
📝 作业
- 用 for 循环输出 1 到 100 的所有偶数(提示:步长为 2 或
% 2 == 0判断)。 - 创建一个关联数组,存储你的 5 个朋友的名字和电话号码,用 foreach 遍历并以表格形式展示。
- 用嵌套循环打印一个金字塔星号图案(第1行1个星,第2行3个,...第5行9个,居中对齐)。