PHP while循环问题

时间:2010-07-08 16:36:43

标签: php loops

我主要是一个CSS和HTML人,但我最近冒险进入PHP。

我看不出为什么这个脚本会挂起:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    $loop_Until = $loop_Until + 1;
}

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:18)

固定代码

$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 :(得分:11)

这会导致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,永远不会增加$i,因此$i始终会小于$loop_Until

答案 2 :(得分:1)

最简单的解决方案:将“+”替换为“ - ”。这将导致循环结束。像这样:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    $loop_Until = $loop_Until - 1;
}

让我解释一下,提供一个稍好的解决方案,并给你一些选择。

如果我们假设$ i的开头小于$ loop_Until,那么在$ loop_Until中添加1并使用行$loop_Until = $loop_Until + 1;将永远不会使$ 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设置为你想要的任何东西(小于$ loop_Until,如果你想让你的while循环运行至少一次),那么:

$loop_Until = 10;

while($i < $loop_Until)
{
    // do some code here
    ++$i;
}

顺便提一下,++$i is faster than $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。

答案 3 :(得分:0)

while( 0 != ($loop_until--) );