我主要是一个CSS和HTML家伙,但我最近冒险进入PHP。PHP虽然循环问题
我不明白为什么这个脚本挂起:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until + 1;
}
任何人都可以请帮助?
我主要是一个CSS和HTML家伙,但我最近冒险进入PHP。PHP虽然循环问题
我不明白为什么这个脚本挂起:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until + 1;
}
任何人都可以请帮助?
这是导致ifinate循环,你会想看看php for
循环。 http://php.net/manual/en/control-structures.for.php
for($i= 1; $i< $loop_Until; ++$i) {
// do some code here
}
你每次增加$loop_Until
永不increaing $i
因此$i
将始终小于$loop_Until
固定码
$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;
}
+1用于使用原始while构造,而不是重写为for。 – dmp 2010-07-08 16:41:35
+1对于他最初的代码的解释 - 总是很好地知道为什么有些东西不能按预期工作。 – user353297 2010-07-08 17:05:30
@danp:这是一个加...如何? idio表示他们以前只使用HTML和CSS,并且可能不知道“for”循环,这是用于循环计数器的正确构造。 – Powerlord 2010-07-08 19:00:19
最简单的解决方案:用“ - ”替代“+”。这将导致循环结束。像这样:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
$loop_Until = $loop_Until - 1;
}
让我解释一下,提供一个稍微好一点的解决方案,并给你几个选择。
如果我们假设$ i的开始时间小于$ loop_Until,那么将1加到$ loop_Until中的行$loop_Until = $loop_Until + 1;
绝不会使$ i等于或大于$ loop_Until。
您应该从$ loop_Until中减去,或者添加到$ i。
从变量中减去1可以快速完成,--$variable
。 添加1至变量可以快速做,++$variable
来完成,所以你应该有:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
--$loop_Until;
}
为$ loop_Until听起来像是你可能需要设置一次,然后让它保持不变的东西。在这种情况下,您可以设置$ i并递增。因此,首先设置$ i到任何你想要的(超过$ loop_Until小,如果你希望你的while循环至少运行一次),然后:
$loop_Until = 10;
while($i < $loop_Until)
{
// do some code here
++$i;
}
顺便说一句,++$i is faster than $i++
如蜥蜴提到,对于循环非常适合这样做。这两个等效回路上面的代码中的两个部分
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可能是个不错的主意。
'++ $ i vs $ i ++'是微优化的一个很好的例子。哇,看来你每次使用'++ $ i'而不是'$ i ++'节省整个0.6μs! – 2010-07-08 20:15:47
是的。这是一个很好的习惯。可读性是相当的,击键是相同的,但你确实做了一个微小的改变,所以你也可以......也告诉你两者之间的区别,因为它们并不总是可以互换的(参见TheBoss的答案) – 2010-07-08 22:00:57
while(0 != ($loop_until--));
你是否假设0是一个重要的数字。 OP要比较$ i ....还有,为什么不用while($ loop_until--),如果你想比较为0 – 2010-07-08 17:04:18
'$ loop_until = 10/3;' – 2010-07-08 20:26:02
您期望的范围是什么? – 2010-07-08 16:38:18