将PHP的while循环转换为for -loop

Léo*_* 준영 1 php for-loop while-loop

如何将以下while循环转换为PHP中的for -loop?

while( $row2 = pg_fetch_row( $result_tags )
Run Code Online (Sandbox Code Playgroud)

虽然-loops是我的错误来源.我看到while -loop如下.

for ( $i = 0 ; $i < count(pg_fetch_row( $result_tags )) ; $i++ )
Run Code Online (Sandbox Code Playgroud)

And*_*ore 9

你无法将其转换whilefor.

for循环用于增量循环.while循环用于执行代码,直到条件为止false.虽然大多数for循环可以很容易地转换为while循环(for循环只是循环的语法增强while),但相反的情况并不总是可行的.

考虑以下循环:

while($row = pg_fetch_row($result)) { }
Run Code Online (Sandbox Code Playgroud)

此循环将执行,直到pg_fetch_row()返回一个假值.

注意:这种循环的正确语法是:

    while(($row = pg_fetch_row($result)) !== FALSE) { }

不幸的是,您最接近使用for循环的方法如下:

for(; $row = pg_fetch_row($result) ;) {}
Run Code Online (Sandbox Code Playgroud)

while无论如何,它的行为与循环完全相同.

注意:同样,这种循环的正确语法是:

    for(; ($row = pg_fetch_row($result)) !== FALSE ;) { }

我认为你应该回到你的代码中找到问题的原因,而不是责备while循环的使用.

pg_fetch_row()返回一个列数组,因此您无法使用count()它.

你可以使用for循环最接近的方法pg_num_rows是:

for($i = 0; $i < pg_num_rows($result); $i++) {
    $row = pg_fetch_row($result);
}
Run Code Online (Sandbox Code Playgroud)

但就我个人而言,我发现不必要的冗长和对更多问题持开放态度.

  • +1.这个答案可以使用"!== FALSE"测试的解释,即一个空数组将被类型变为FALSE并且循环将退出,即使`pg_fetch_row(...)`返回一行.当然,如果行没有列,您可能希望跳过循环.此外,"!== FALSE"测试是语义问题,而不是语法问题. (2认同)

out*_*tis 5

走向另一个方向,一个for循环:

for (init; test; incr) {body;}
Run Code Online (Sandbox Code Playgroud)

相当于:

init;
while (test) {
    body;
    incr;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,for循环是一种特殊的while循环.就个人而言,我没有看到如何转换你给for循环的while循环将减少错误.