为什么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 />";
}
答案 0 :(得分:3)
仅当条件评估为true
时才执行循环。在第一次迭代中,$z == $cnt
为false
,因此循环永远不会执行。
常见的循环策略是使用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)
让我们从计算机的角度来看这个:
如果我是电脑,这就是你告诉我的事情:
麻烦的是,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 />";
}