数组resAlloc
包含10列和5行。所有条目都等于0.所以,我希望以下IF语句为TRUE,但由于某种原因它是假的...为什么?
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
答案 0 :(得分:3)
!=
将0
评估为false
。使用!==
更多 strict 。
答案 1 :(得分:0)
IIRC等于0与!=的任何内容将返回FALSE。
答案 2 :(得分:0)
问题在于你要比较一个字符串和一个整数,并且PHP“有帮助”将字符串转换为整数 - 整数为零。 0!='ts'
的评估结果为false
,因为转化后最终的比较为0!=0
。您可以通过将数组的内容显式地视为字符串来阻止这种情况:
strval($resAlloc[$i][$j]) != 'ts'
这将进行比较'0'!='ts'
,正确评估为true
。如果你传递strval()一个字符串,它会保持不变,所以无论你的数组是什么,这都应该是安全的。
或者,正如Samy Dindane所说,您可以使用!==,它不会进行任何类型转换。