该数组resAlloc
包含 10 列和 5 行。所有条目都等于 0。所以,我希望下面的 IF 语句为 TRUE,但由于某种原因它是错误的……为什么?
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
该数组resAlloc
包含 10 列和 5 行。所有条目都等于 0。所以,我希望下面的 IF 语句为 TRUE,但由于某种原因它是错误的……为什么?
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
。如果你传递 strval() 一个字符串,它会原封不动地返回它,所以无论你的数组中有什么,这都应该是安全的。
或者,正如 Samy Dindane 所说,您可以使用 !== 不会进行任何类型转换。