1

如何在 PHP 中将以下 while 循环转换为 for 循环?

while( $row2 = pg_fetch_row( $result_tags )

While -loops 对我来说是错误的来源。我看到 while 循环如下。

for ( $i = 0 ; $i < count(pg_fetch_row( $result_tags )) ; $i++ )
4

3 回答 3

9

您不能将其转换whilefor.

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

考虑以下循环:

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

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

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

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

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

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

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);
}

但就我个人而言,我发现这不必要地冗长并且容易引发更多问题。

于 2009-08-15T20:34:12.290 回答
5

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

for (init; test; incr) {body;}

相当于:

init;
while (test) {
    body;
    incr;
}

也就是说,for 循环是一种特殊的 while 循环。就个人而言,我看不出将您提供的 while 循环转换为 for 循环将如何减少错误。

于 2009-08-15T20:32:17.177 回答
1

你为什么要这样做?更好的方法是声明/实例化,然后在循环$i = 0结束时增加它。while

于 2009-08-15T20:31:47.850 回答