【问题标题】:To convert PHP's while loop to a for -loop将 PHP 的 while 循环转换为 for 循环
【发布时间】:2010-11-19 22:41:34
【问题描述】:

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

while( $row2 = pg_fetch_row( $result_tags )

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

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

【问题讨论】:

  • 您的 while 语句中不是缺少错误),是吗?
  • 您在使用 while 循环时遇到了哪些问题?

标签: php for-loop while-loop


【解决方案1】:

您无法将 while 转换为 for

for 循环用于增量循环。 while 循环用于执行代码,直到条件为 false。虽然大多数for 循环可以轻松转换为while 循环(for 循环只是while 循环的语法增强),但并非总是可以相反。

考虑以下循环:

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

此循环将一直执行到pg_fetch_row() 返回falsy value

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

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

但我个人认为这不必要地冗长并且容易引发更多问题。

【讨论】:

  • +1。这个答案可以使用对“!== FALSE”测试的解释,即一个空数组将被混合为一个 FALSE 并且循环将退出,即使pg_fetch_row(...) 返回了一行。当然,如果行没有列,您可能希望跳过循环。此外,“!== FALSE”测试是语义问题,而不是语法问题。
  • 是的……但你不能说“正确的语义”……这就是我说语法的原因。
【解决方案2】:

换个方向,一个for循环:

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

相当于:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-22
      • 2017-04-26
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2014-06-18
      相关资源
      最近更新 更多