數組resAlloc
包含10列和5行。所有條目都等於0.所以,我期望以下IF語句爲TRUE,但由於某種原因它是錯誤的......爲什麼?PHP:如果語句問題
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
數組resAlloc
包含10列和5行。所有條目都等於0.所以,我期望以下IF語句爲TRUE,但由於某種原因它是錯誤的......爲什麼?PHP:如果語句問題
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
!=
評估0
爲false
。使用!==
這是更多嚴格。
問題是,你正在比較一個字符串和一個整數,PHP是「有用的」將字符串轉換爲一個整數 - 整數零。 0!='ts'
評估爲false
,因爲它在轉換後最終做的比較是0!=0
。你可以明確地處理你的數組的內容作爲字符串防止這種情況:
strval($resAlloc[$i][$j]) != 'ts'
這會做的比較'0'!='ts'
,其正確的計算結果爲true
。如果你傳遞strval()一個字符串,它將不會改變它,所以無論數組中的內容如何,這都應該是安全的。另外,正如Samy Dindane所說,你可以使用!==,它不會做任何類型轉換。
這是如何解釋問題的? '0!='ts''和'false!='ts''都應該是「真」,因此if語句應該是真的。 – octern
這是不正確的。 'false && false'等於'false'。 –
向誰低估:你爲什麼不解釋原因? –