2011-11-16 86 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++){}