2012-09-28 84 views
1

當我編寫代碼時,我必須使用例如PHP困惑for()語句

$six = 6; 
for ($i = $six; $i > 1; $i--) { 
    echo $i."<br>"; 
} 

輸出

6 
5 
4 
3 
2 

我需要它輸出1,以及我知道我可以做評價for ($i = 6; $i >= 1; $i--)

for ($i = $six+1; $i > 1; $i--)但其混亂的這麼muchg! 事實上,我總是在使用for聲明時感到困惑。

編輯:它的混亂,因爲我不喜歡倒着思考.. ID喜歡跑環,而不是條件$six > 1是真實的,而是像以前一樣$six = 1條件滿足。

相反的方式我想

loop_before ($six==1) { 
    echo $six.<br />; 
    $six--; 
} 

良好,即使這一次不會輸出654321 ...想我只需要回學校去。 要做

loop_before ($six<1) { 
    echo $six.<br />; 
    $six--; 
} 
+1

閱讀http://php.net/manual/en/control-structures.for.php瞭解循環如何工作。一旦你做了足夠多的時間,你就會習慣它。 – NullUserException

+1

也許你可能從解釋你爲什麼感到困惑中獲益。代碼讀起來很清楚,當你想到它。從6開始循環並倒計時。如果$ i大於1,繼續前進。在你的情況下,當$ i達到1時,它不再符合大於1的要求,如你所寫,所以它不打印。直向前。 –

+0

我不確定這是一個問題 - 你似乎知道語法,爲什麼它失敗了,但你只是說它讓你感到困惑? – ernie

回答

1

這種混亂可能並不只爲for()語句,但對於其它類型的循環。您可以使用$six >= 1$six > 0

例1

$six = 6; 
do { 
    echo $six . "<br>"; 
    $six --; 
} while ($six >= 1); 

例2

$six = 6; 
for($i = $six; $i >= 1; $i --) { 
    echo $i . "<br>"; 
} 

例3

$six = 6; 
while ($six >= 1) { 
    echo $six . "<br>"; 
    $six --; 
} 

最後你可能會決定不使用,甚至任何默認的PHP循環

$six = 6; 
__loop($six); 

function __loop($x) { 
    echo $x . "<br>"; 
    $x --; 
    ($x < 1) ? $x : __loop($x); 
} 

他們都返回同樣的事情

6 
5 
4 
3 
2 
1 
4

你的「基本情況」簡單地更改爲$i > 0

另外,運營商變更爲$i >= 1

+0

如果我不用數組或數組,以1(不是0)開始並使用'$ i> 0',那麼如果我必須使用循環內的$ i',我必須每次都使用$ i + 1時間更混亂。 –

+0

不,不。 :)你可以做到這一點,而不會令人困惑。請記住,數組索引值總是從0開始,而不是1.因此,您需要在for()循環中以某種方式多循環一次,無論是將基本情況設置爲0而不是1,還是添加'$ i + 1',正如你所建議的那樣。這是一個非常常見的初學者錯誤,稱爲「關閉一個」錯誤。但不要感覺不好,因爲即使世界上最先進的程序員仍然犯這個錯誤,因爲人類從0開始而不是從1開始計數是不自然的。:) – L0j1k

+0

@ L0j1k不總是;) – meze

0

要解釋清楚,你是說在執行代碼循環如果$i > 1

因此,如果$ i 1那麼它將不執行代碼。 1不大於1

更大正如lojik所述用途$i > 0$i >= 1

+0

我猜測> =比改變數字+1或-1更好。 –

+0

我認爲更好的方法是對你最有意義的。但我同意,並希望在這種情況下使用> =我自己。 –

0

在英語中,for循環的語法是這樣做的:

At the start of the loop, $i is equal to $six. 
Run the loop 'while' $i is greater than 1. 
At the end of each running on the looping statement, decrement 1 from $i. 

所以,當$ i被遞減到1的值,條件語句$i > 1不再返回true,因爲它檢查$ i是否大於1.

就像lojik說的那樣,使用$ i> 0或$ i> = 1 ,因此當$ i等於1時,條件通過並停止,因爲在下一個循環中,$ i小於比較值(在示例1中)。在for循環之後,如果您檢查了$ i的值,您會看到它等於0,這會導致條件失敗。