
php while 循环怎么写才不会死循环
写错条件或忘记更新变量,while 就会卡住不退出。核心就两点:判断条件得能变,循环体里必须有让条件变假的动作。
常见错误现象:while ($i —— <code>$i 始终是初始值,输出停不下来,CPU 占满。
- 条件表达式放在
while后面的括号里,每次循环开始前都会重新计算 - 循环体内必须修改参与判断的变量(比如
$i++、$data = array_shift($list)) - 如果用数组索引控制,注意边界:用
count($arr)要小心数组被修改导致长度变化
while 和 foreach 用哪个更合适
遍历已知长度的数组,优先用 foreach;需要手动控制流程、提前退出、或条件不只依赖数组长度时,才选 while。
使用场景对比:
立即学习“PHP免费学习笔记(深入)”;
-
foreach:安全、简洁、自动处理键值、不易出错,适合绝大多数遍历需求 -
while:适合读取文件句柄(fgets($fp))、数据库游标(mysqli_fetch_row($result))、或需要“先判断再执行”的逻辑(比如重试机制) - 性能差异极小,别为这点微差换写法;可读性和正确性更重要
while 循环里 break 和 continue 怎么用才不乱
break 是跳出整个循环,continue 是跳过本次剩余代码、直接进下一轮判断。容易混淆的是它们对嵌套循环的影响。
常见错误现象:while ($i —— 这里 <code>$i++ 永远不执行,$i 卡在 2,变成死循环。
- 把增量/更新语句放在
continue前,或者统一放到循环末尾(但要确保所有分支都覆盖) -
break 2可以跳出两层循环,但只在真正需要时用,嵌套深了建议重构逻辑 - 调试时加
var_dump($i);看变量实际值,比猜更可靠
while 配合数据库查询容易漏掉最后一行
用 mysqli_fetch_array() 或 PDOStatement::fetch() 驱动 while 时,典型写法是 while ($row = mysqli_fetch_array($result))。问题在于:这个赋值本身就有返回值,且最后一次返回 null,循环自然结束。
但有人误写成 while (mysqli_fetch_array($result)) { $row = mysqli_fetch_array($result); } —— 每次调两次 fetch,必然跳过一行。
- 永远只 fetch 一次,把结果直接赋给变量并用于判断
- 不要在条件里调用函数,又在循环体里再调一次同函数
- 如果要用
while处理查询结果,优先封装成迭代器或用fetch_all()转成数组再foreach,更可控











