1

为什么双等于在 PHP for 循环中不起作用?以下作品:

$cnt = 5;
for ($z = 0; $z <= $cnt; $z++) {
    echo $z."!<br />";
}

但为什么这不起作用?

$cnt = 5;
for ($z = 0; $z == $cnt; $z++) {
    echo $z."!<br />";
}
4

5 回答 5

3

仅当条件计算为 时,循环才会执行true。在第一次迭代时,$z == $cntis false,所以循环永远不会执行。

一个常见的循环策略是使用一个标记值

$cnt = 5;
$stop = $cnt + 1;
for ($z = 0; $z != $stop; $z++) {
    . . .
}

请注意,比较是否定的(!=!==)。对于数值循环变量,通常不需要使用哨兵(我不建议在您发布的代码中使用它),但对其他情况很有用(例如,何时$stop表示null、非法值等)。当循环变量以不易简洁描述的模式变化时,它特别有用。

于 2013-08-01T18:35:43.683 回答
1

因为在第一次迭代$z != $cnt中,所以循环立即停止。

于 2013-08-01T18:35:45.613 回答
1

的语法for是:

for (<init>; <condition>; <increment>)

<condition>每次迭代之前的循环测试。如果是true,则执行该迭代;如果是false,则循环终止。

在您的情况下,由于$z == $cntfalse第一次迭代之前,循环立即终止。

做你想做的事,倒置测试。您还需要将最终值提高一,因为使用的是原始版本<=,而不是<. 请注意,在这两种情况下,循环都会执行$cnt+1次数,因为您从 0 开始。

for ($z = 0; $z != $cnt+1; $z++)
于 2013-08-01T18:37:01.630 回答
1

让我们从计算机的角度来看这个:

如果我是一台计算机,这就是您告诉我要做的事情:

  • 设置 $cnt = 5;
  • 设置 $z = 0;
  • 检查 $z 是否等于 $cnt
  • 如果是,则执行循环中的任何操作,然后递增 $z

麻烦的是,5 不等于 0,而且永远不会,所以循环将被简单地跳过。如果你在循环中有 $cnt = $z+1 这将是一个无限循环。

所以,你看, == 工作得很好,它根本没有做你认为它应该做的事情。

希望这可以帮助!

于 2013-08-01T18:37:42.540 回答
1

for 循环通过循环工作,直到条件为假。在第一个示例中,循环将一直执行到 z = 5,之后 z 将不再小于或等于 cnt(z 从 0 开始并在每个循环中递增)。在第二个示例中,您将 $z == $cnt 作为您的条件,并且由于 z = 0 和 cnt = 5 循环将自动停止,因为条件为假。您可以使用不等于,如下所示:

$cnt = 6;
for ($z = 0; $z != $cnt; $z++) {
    echo $z."!<br />";
}
于 2013-08-01T18:42:50.920 回答