我主要是CSS和HTML方面的人,但最近开始涉足PHP。
我不明白为什么这个脚本会卡住:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until + 1;
}
有人能帮忙吗?
修复后的代码
$loop_Until = 10;
$i = 0;
while($i < $loop_Until)
{
// do some code here
$i = $i + 1;
}
您代码的解释:
// A variable called loop until is set to 10
$loop_Until = 10;
// While the variable i is less than 10
// NOTE: i is not set in code snippet, so we have no way of knowing what value it is, if it is greater than 10 it might be infinite
while($i < $loop_Until)
{
// Increment the 10 value up 1 every time, i never changes!
$loop_Until = $loop_Until + 1;
}
for
循环,而这是正确的循环计数结构。 - Powerlord这会导致无限循环,您需要查看PHP的for
循环。http://php.net/manual/en/control-structures.for.php
for($i= 1; $i< $loop_Until; ++$i) {
// do some code here
}
你每次都在增加 $loop_Until
,但没有增加 $i
,因此 $i
将永远小于 $loop_Until
最简单的解决方案:将“+”替换为“-”。这将导致循环结束。像这样:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until - 1;
}
让我解释一下,提供一个稍微更好的解决方案,并给你几个替代方案。
如果我们假设 $i 开始时比 $loop_Until 小,那么使用代码行 $loop_Until = $loop_Until + 1;
增加 $loop_Until 的值永远不会使得 $i 等于或大于 $loop_Until。
你应该从 $loop_Until 减去一个数,或者给 $i 加上一个数。
通过执行 --$variable
可以快速地从一个变量中减去 1。
通过执行 ++$variable
可以快速地给一个变量加上 1,因此你应该这样写:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
--$loop_Until;
}
当然,$ loop_Until听起来像是你可能想要设置一次,然后让它保持不变的东西。 在这种情况下,您可以设置$i并递增它。 首先将 $i 设置为您想要的任何值(如果您希望 while 循环至少运行一次,则应该小于$ loop_Until),然后执行以下操作:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
++$i;
}
顺便提一下,++$i比$i++更快
正如Lizard所提到的,for循环非常适合做这件事。上面两个代码段的等效for循环如下:
for($loop_Until = 10; $i < $loop_Until; --$loop_Until)
{
// do some code here
}
并且
for($loop_Until = 10; $i < $loop_Until; ++i)
{
// do some code here
}
请确保您在纸上或脑海中使用几个数字检查您的条件最终会发生。
最后,您选择哪种解决方案将取决于您是否希望 $i 或 $loop_Until 保持不变。
如果您有多个循环,并且希望它们都执行相同的次数,则最好不要改变 $loop_Until,并在每个循环开始时重置 $i。
while( 0 != ($loop_until--) );
while( 0 != ($loop_until--) );