2012-05-19 71 views
0

數組resAlloc包含10列和5行。所有條目都等於0.所以,我期望以下IF語句爲TRUE,但由於某種原因它是錯誤的......爲什麼?PHP:如果語句問題

if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') { 
    $count++; 
} 

回答

3

!=評估0false。使用!==這是更多嚴格

+0

這是如何解釋問題的? '0!='ts''和'false!='ts''都應該是「真」,因此if語句應該是真的。 – octern

+0

這是不正確的。 'false && false'等於'false'。 –

+0

向誰低估:你爲什麼不解釋原因? –

0

IIRC東西等於0與!=將返回FALSE。

+0

這是不正確的。 '0!= 1'返回'true'(謝天謝地!)。我認爲這是一個將字符串與整數進行比較的問題 - 字符串被轉換爲整數零,所以最後兩個都是相等的! – octern

+0

我說IIRC,並不確定。 – alexpja

0

問題是,你正在比較一個字符串和一個整數,PHP是「有用的」將字符串轉換爲一個整數 - 整數零。 0!='ts'評估爲false,因爲它在轉換後最終做的比較是0!=0。你可以明確地處理你的數組的內容作爲字符串防止這種情況:

strval($resAlloc[$i][$j]) != 'ts' 

這會做的比較'0'!='ts',其正確的計算結果爲true。如果你傳遞strval()一個字符串,它將不會改變它,所以無論數組中的內容如何,​​這都應該是安全的。另外,正如Samy Dindane所說,你可以使用!==,它不會做任何類型轉換。