2011-11-16 55 views
0

运行此脚本时出现了一个愚蠢的问题。为什么for循环的主体从未被执行?从未执行php for-loop

<?php 
ini_set('error_reporting', E_ALL); 

$i=0.0; 
$j=1.0; 
$max=3000; 

for ($z=0; $z==$max; $z++) { 
    $i += (1.0/$max); 
    $j -= (1.0/$max); 

    echo "j=$j - i= $i <br>"; 
    if(($z % 100) == 0){ 

     echo "j=$j ¦ i= $i <br>"; 
    }; 
}; 

?> 

编辑:正如你看到它是可以学习的愚蠢;-)

回答

8

它永远不会进入。

for ($z=0; $z==$max; $z++) 

z不能==$max


试试这个:

for ($z=0; $z<=$max; $z++) 
+2

@ kjy112不要让像这样大的变化。 .. – Neal

+0

我只是改变了代码的格式,但没有回答 – kjy112

+0

@ kjy112看看修订历史。 – Neal

3
for ($z=0; $z==$max; $z++) 

你想$ Z^< = $最大值。

for循环的中间是条件语句,如果它的计算结果为false,则不执行。

即循环是基本相同:

$z = 0; 
while($z == $max){ 
    // Do Stuff 
    $z++; 
} 
0

Manual

for (expr1; expr2; expr3) 
    statement 

第一个表达式(表达式1)进行评估(执行)一次无条件在循环的开始。

在每次迭代开始时,评估expr2。如果它的计算结果为TRUE,则循环继续,并执行嵌套语句。如果它评估为FALSE,则循环的执行结束。

在每次迭代结束时,评估(执行)expr3。

你可能想把$z<=$max放在那里。

+1

实际上,它永远不会运行,甚至不会运行一次。在第一次迭代之前'expr2'是FALSE,所以没有任何反应。 –

+0

谢谢,你是对的。我误读了“第一个表达式(...)被无条件评估(...)”为“第一个循环将被无条件地执行......”。我的错。 :-) – CodeCaster

0

因为只有第二个语句在您的情况下为$z == $max才会运行循环。这肯定是不正确的,因为你已经有了定义的值和$最大是3000这就像你已经进入for($z=0;0 == 3000;$z++){}