上个月带实习生改一个订单列表页,他用计数循环取数组,下标越界报错三次还没改对,我让他换成增强循环,五分钟就跑通了。这种逐个拿元素的场景,几乎每天都会碰到,掌握几种固定写法能省很多调试时间。
PHP里遍历数组最顺手的写法
PHP的写法是先写数组再写单个变量,循环体里直接用这个变量。带键名的数组可以一次拿出键和值,做配置表解析特别方便。比如用户提交的表单数组,用这种方式逐行过滤空值,代码比计数循环短一半。记得循环变量名别和外层重名,不然老数据会被覆盖掉。
JS里容易搞混的两种循环
前端有个大小写坑,数组自带的方法是回调形式,三个参数分别是当前值、下标和原数组,适合直接处理每个元素。另一种关键字写法直接拿到值,想跳过或停下可以直接用跳转语句,回调形式里这招不好使。做表格渲染时,关键字写法配模板拼接,一轮就能拼出一行记录。
跳过脏数据与提前结束的例子
查到空行想跳过,关键字循环里用继续语句,本轮直接进入下一轮。查到目标想停,比如在上万条日志里找第一个报错订单,找到后立刻跳出,后面不用再跑。计数循环也能做到,但条件要写两处,新手经常漏改一处导致多跑很多轮。
新手常犯的三个错误
一是在循环里删除数组元素,后面元素会前移导致漏掉一条,正确做法是先记下要删的键,循环结束再统一删。二是把关联数组当普通数组用下标取值,结果全是空,关联数组一定要用键名取。三是循环变量用引用符号后忘记取消,后面复用同名变量会莫名被改,养成用完就取消引用的习惯。
- 选型口诀:只读逐个处理用增强循环,要改下标或步长再用计数循环
- 调试技巧:循环体内先打印键和值,确认拿到什么再写业务逻辑
- 性能提醒:万级以上数组先在循环外取长度或做缓存,别每轮重复计算
foreach(订单数组 as 单条){ 处理(单条) }foreach(配置 as 键名 as 值){ 保存(键名,值) }数组.forEach(函数(值,下标){ 打印(值) })for(值 of 列表){ 跳过空行,命中即停 }