2010-07-08 230 views
5

我主要是一個CSS和HTML傢伙,但我最近冒險進入PHP。PHP雖然循環問題

我不明白爲什麼這個腳本掛起:

$loop_Until = 10; 

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

任何人都可以請幫助?

+0

您期望的範圍是什麼? – 2010-07-08 16:38:18

回答

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; 
} 
+3

+1用於使用原始while構造,而不是重寫爲for。 – dmp 2010-07-08 16:41:35

+1

+1對於他最初的代碼的解釋 - 總是很好地知道爲什麼有些東西不能按預期工作。 – user353297 2010-07-08 17:05:30

+1

@danp:這是一個加...如何? idio表示他們以前只使用HTML和CSS,並且可能不知道「for」循環,這是用於循環計數器的正確構造。 – Powerlord 2010-07-08 19:00:19

1

最簡單的解決方案:用「 - 」替代「+」。這將導致循環結束。像這樣:

$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可能是個不錯的主意。

+0

'++ $ i vs $ i ++'是微優化的一個很好的例子。哇,看來你每次使用'++ $ i'而不是'$ i ++'節省整個0.6μs! – 2010-07-08 20:15:47

+0

是的。這是一個很好的習慣。可讀性是相當的,擊鍵是相同的,但你確實做了一個微小的改變,所以你也可以......也告訴你兩者之間的區別,因爲它們並不總是可以互換的(參見TheBoss的答案) – 2010-07-08 22:00:57

0

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

+1

你是否假設0是一個重要的數字。 OP要比較$ i ....還有,爲什麼不用while($ loop_until--),如果你想比較爲0 – 2010-07-08 17:04:18

+0

'$ loop_until = 10/3;' – 2010-07-08 20:26:02