数组resAlloc
包含 10 列和 5 行。所有条目都等于 0。所以,我希望以下 IF 语句是真的,但由于某种原因它是错误的......为什么?
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
!=
评估0
为false
。使用更严格的!==
。
IIRC 任何等于 0 和 != 的东西都将返回 FALSE。
问题是你正在比较一个字符串和一个整数,而 PHP "有用地"将字符串转换为一个整数 - 整数零。 0!='ts'
的计算结果为 false
,因为它在转换后最终进行的比较是0!=0
。您可以通过将数组的内容显式视为字符串来防止这种情况:
strval($resAlloc[$i][$j]) != 'ts'
这将执行比较'0'!='ts'
,正确计算为 true
。如果你传递一个字符串,它会原封不动地返回它,所以无论你的数组中有什么,这都应该是安全的。
或者,正如 Samy Dindane 所说,你可以只使用 !==,它不会进行任何类型转换。