2013-08-01 64 views
0

爲什麼double不等於PHP for循環?以下作品:雙等於for循環?

$cnt = 5; 
for ($z = 0; $z <= $cnt; $z++) { 
    echo $z."!<br />"; 
} 

但爲什麼不能正常工作?

$cnt = 5; 
for ($z = 0; $z == $cnt; $z++) { 
    echo $z."!<br />"; 
} 
+8

你是什麼意思,它不起作用? '0 == 5'是錯誤的,所以循環永遠不會執行。 –

+0

叮咚。我知道我忽略了一些非常簡單的事情。謝謝。 – Darius

+0

我在找的是: $ cnt = 5; ($ z = 0; $ z!= $ cnt; $ z ++){ echo $ z。「!
」; } – Darius

回答

2

僅當條件評估爲true時,循環才執行。在第一次迭代中,$z == $cntfalse,所以循環從不執行。

一個常見的循環策略是使用一個sentinel value

$cnt = 5; 
$stop = $cnt + 1; 
for ($z = 0; $z != $stop; $z++) { 
    . . . 
} 

注意,比較是否定的(或!=!==)。數值循環變量通常不需要使用標記(我不會推薦它用於您的發佈代碼),但對於其他情況(例如$stop代表null,非法值等)很有用。當循環變量以不易表徵的模式變得簡單時,它特別有用。

1

因爲在第一次迭代$z != $cnt,所以循環立即停止。

1

for的語法是:

for (<init>; <condition>; <increment>) 

環路測試<condition>每次迭代之前。如果它是true,它會執行該迭代;如果它是false,則循環終止。

就你而言,由於$z == $cnt在第一次迭代之前是false,所以循環立即終止。

做你想做的事,把測試顛倒過來。由於原始版本使用的是<=而不是<,因此您還需要將最終值增加1。請注意,在這兩種情況下,循環執行$cnt+1次,因爲你從0

for ($z = 0; $z != $cnt+1; $z++) 
1

開始讓我們來看看這個從電腦的角度來看:

如果我是一個電腦,這是你告訴我要做:

  • set $ cnt = 5;
  • set $ z = 0;
  • 檢查,如果$ z等於$ CNT
  • 如果這樣做無論是在循環,然後增加$ Z^

麻煩的是,5不等於0,並且永遠不會,所以循環將簡單地跳過。如果你在循環內有$ cnt = $ z + 1,這將是一個無限循環。

所以,你看,==工作得很好,它根本不會做你認爲它應該做的事情。

希望這會有所幫助!

1

for循環通過循環工作,直到條件變爲false。在第一個例子中,循環將執行到z = 5之後,z不會再小於或等於cnt(z從0開始並通過每個循環遞增)。在第二個示例中,$ z == $ cnt作爲您的條件,並且由於z = 0和cnt = 5,循環將自動停止,因爲條件爲false。你可以使用不等於,而不是像下面這樣:

$cnt = 6; 
for ($z = 0; $z != $cnt; $z++) { 
    echo $z."!<br />"; 
}