while循环中的一个注意事项
for和while是最常用的循环控制结构。就常用场景,循环次数确定时用for比较多;如果只有退出条件,for和while的用量基本持平。
近日需要读取excel表格中的数据,退出条件为某个单元格内的内容为指定值,同时中间的一些空行需要跳过。因为读取的表格行数不确定,遍历表格使用了while循环,代码如下:
$row = 1; while (true) { $cellValue1 = getCellValue(); if ($cellValue1 === '') { continue; } $cellValue2 = getCellValue(); if ($cellValue2 === 'xxx') { break; } ++ $row; }
上述代码有一个坑:跳过空行的时候会陷入死循环。原因在于continue前没有自增$row的值,所以下次还会读取到同一行,然后又判断为空,如此继续。要让程序按预期运行,在所有break前面都应该加上 ++ $row。
这个事让我注意到了for循环的便利性。for循环的第三个语句总是会执行,所以continue前无需自增;如果continue的地方多,那么每个地方都需要自增变量,就会让代码变得啰嗦且不可维护。在这种情形下,for循环是比while循环更好的选择。
如果坚持使用while循环,在每个continue语句时需要注意类似上述的问题。
原文链接:https://www.qiquanji.com/post/4858.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。