双重等于for循环?

时间:2013-08-01 18:32:37

标签: php for-loop

为什么double for equals在PHP for循环中不起作用?以下作品:

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

但为什么这不起作用?

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

5 个答案:

答案 0 :(得分:3)

仅当条件评估为true时才执行循环。在第一次迭代中,$z == $cntfalse,因此循环永远不会执行。

常见的循环策略是使用sentinel value

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

请注意,比较为否定(!=!==)。数字循环变量通常不需要使用标记(我不建议将其用于您发布的代码),但对其他情况(例如$stop表示null时,非法值等)非常有用)。当循环变量以难以简洁的特征描述的模式发生变化时,它尤其有用。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

for的语法是:

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

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

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

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

for ($z = 0; $z != $cnt+1; $z++)

答案 3 :(得分:1)

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

如果我是电脑,这就是你告诉我的事情:

  • 设置$ cnt = 5;
  • 设置$ z = 0;
  • 检查$ z是否等于$ cnt
  • 如果是,那么循环中的任何内容,则增加$ z

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

所以,你看,==工作正常,它根本不做你认为它应该做的事情。

希望这有帮助!

答案 4 :(得分:1)

for循环通过循环工作直到条件变为false。在第一个例子中,循环将执行直到z = 5,之后z将不再小于或等于cnt(z从0开始并逐渐增加每个循环)。在第二个示例中,您将$ z == $ cnt作为条件,并且由于z = 0且cnt = 5,因此循环将自动停止,因为条件为false。你可以使用not equals代替如下:

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