PHP初学者只需掌握4种循环:for、while、do-while、foreach;for适用于次数确定场景,while先判断后执行,do-while至少执行一次,foreach专用于数组和对象遍历。

for 循环:适合「数得清次数」的场景
当你明确知道要跑多少次(比如输出 1~10、处理固定长度数组索引),`for` 最直观。它的三段式结构不是炫技,而是强制你理清「从哪开始」「停在哪」「怎么走」。
- 常见错误:忘记写
$i++或写成$i = $i + 1却漏了分号,导致死循环 - 别在初始化里声明多个变量(如
for($i=0, $j=0; ...)),PHP 支持但可读性差,初学者容易混乱 - 性能上无明显劣势,但嵌套过深(如三层 `for`)时,建议改用 `foreach` + 函数拆分
while 和 do-while:一个「先判后跑」,一个「先跑再判」
`while` 是条件驱动型循环,适合「不确定次数但有明确退出信号」的场景(如读文件直到 EOF、等待用户输入合法值)。`do-while` 则保证至少执行一次——这是它存在的唯一理由。
-
while忘记更新条件变量 → 无限循环(最常见新手崩溃点) -
do-while的分号不能丢:} while ($cond);,少个分号直接语法报错 - 两者性能几乎一致,选哪个只看逻辑:是否必须先干一票再说?比如「请输密码→校验→不通过就重试」,就该用
do-while
foreach:专治数组和对象遍历,别拿它干别的
这是 PHP 最具特色的循环,也是初学者最容易滥用的——试图用它遍历数字范围、或强行配合键值修改原数组。它只做一件事:安全、简洁地取出数组/对象中的每个元素。
- 遍历关联数组时,
foreach ($arr as $key => $value)比for ($i=0; $i更安全(避免 count()被意外修改) - 想修改原数组值?必须加引用:
foreach ($arr as &$value),否则只是副本操作 - 对空数组,
foreach安静跳过,不会报错;而for若没检查count()可能下标越界
$name) {
echo "$index: $name\n";
}
// 输出:
// 0: apple
// 1: banana
// 2: cherry
?>
初学者最容易忽略的关键细节
所有循环共通的「隐形陷阱」,往往比语法本身更致命:
立即学习“PHP免费学习笔记(深入)”;
- 变量作用域:PHP 中循环内定义的变量(如
$i)在循环外仍存在,不是块级作用域 —— 别指望它自动销毁 -
break和continue默认只影响当前层循环;嵌套时需写break 2才能跳出两层 - 循环中调用耗时函数(如数据库查询、
file_get_contents())却不设超时或限流,本地测试正常,上线直接拖垮服务











