为什么双等于在 PHP for 循环中不起作用?以下作品:
$cnt = 5;
for ($z = 0; $z <= $cnt; $z++) {
echo $z."!<br />";
}
但为什么这不起作用?
$cnt = 5;
for ($z = 0; $z == $cnt; $z++) {
echo $z."!<br />";
}
仅当条件计算为 时,循环才会执行true
。在第一次迭代时,$z == $cnt
is false
,所以循环永远不会执行。
一个常见的循环策略是使用一个标记值:
$cnt = 5;
$stop = $cnt + 1;
for ($z = 0; $z != $stop; $z++) {
. . .
}
请注意,比较是否定的(!=
或!==
)。对于数值循环变量,通常不需要使用哨兵(我不建议在您发布的代码中使用它),但对其他情况很有用(例如,何时$stop
表示null
、非法值等)。当循环变量以不易简洁描述的模式变化时,它特别有用。
因为在第一次迭代$z != $cnt
中,所以循环立即停止。
的语法for
是:
for (<init>; <condition>; <increment>)
<condition>
每次迭代之前的循环测试。如果是true
,则执行该迭代;如果是false
,则循环终止。
在您的情况下,由于$z == $cnt
在false
第一次迭代之前,循环立即终止。
做你想做的事,倒置测试。您还需要将最终值提高一,因为使用的是原始版本<=
,而不是<
. 请注意,在这两种情况下,循环都会执行$cnt+1
次数,因为您从 0 开始。
for ($z = 0; $z != $cnt+1; $z++)
让我们从计算机的角度来看这个:
如果我是一台计算机,这就是您告诉我要做的事情:
麻烦的是,5 不等于 0,而且永远不会,所以循环将被简单地跳过。如果你在循环中有 $cnt = $z+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 />";
}