2011-09-24 106 views
0

我正在嘗試顯示基於排名變化的圖像。如果數組$rank_change的值迴盪if語句,正確的值被印刷在我的,如:Last if語句總是評估爲true(覆蓋)?

0, 0, 0, 0, 0, 0, 0, -7, 1, 1, 1, 1, 1, 1, 1 

然而,如果下面的if語句,總是顯示side.gif之後打印:

if($rank_change[$i] > 0) { $rank_change[$i] = "<img src=\"up.gif\" width=\"16\" height=\"16\"/>"; } 
if($rank_change[$i] < 0) { $rank_change[$i] = "<img src=\"down.gif\" width=\"16\" height=\"16\"/>"; } 
if($rank_change[$i] == 0) { $rank_change[$i] = "<img src=\"side.gif\" width=\"16\" height=\"16\"/>";} 

$rank_change的值爲7和1的情況下,爲什麼最後一條語句仍然評估爲真?

我知道使用switch($rank_change[$i])會更有效率,但是我仍然不明白爲什麼最終的if語句在所有值上都是true。

任何幫助將不勝感激!

回答

3

對於最後兩個條件,使用else-if而不是簡單if。

你實際上在每個測試後面的表達式中覆蓋了$rank_change[$i]中的值。 $rank_change[$i] = "<img src=\"up.gif\" width=\"16\" height=\"16\"/>"將改變$rank_change[$i]的價值,這將使下面的測試還真之一爲好,導致$rank_change[$i]價值的另一個變化......

使用else if結構,只有一個測試會成功。

+2

因爲,大概比較'「任何字符串」== 0「在PHP中評估爲」true「? –

+0

我會嘗試,但我仍然不明白爲什麼最後一個總是會被觸發,因爲if語句只是在條件滿足的情況下評估爲true,否則它被忽略 - 不是案件? – Avicinnian

+0

啊,很好的解釋!我沒有想到這一點。完成,當然,工作:)。當定時器下降時,我會接受你的回答! – Avicinnian

0

Adrien是正確的,你應該使用if-else語句。最後一個條件是評估爲true,因爲php正在對您的值進行某種類型的強制操作。

請參閱http://php.net/manual/en/language.operators.comparison.php(特別是類型比較表)瞭解有關何時/如何執行此操作的更多信息。

基本上,它將'derp' == 0更改爲(int)'derp' == 0(int)'derp'爲0.