0

该数组resAlloc包含 10 列和 5 行。所有条目都等于 0。所以,我希望下面的 IF 语句为 TRUE,但由于某种原因它是错误的……为什么?

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

3 回答 3

3

!=评估0false。使用!==哪个更严格

于 2012-05-19T22:16:54.187 回答
0

IIRC 任何等于 0 的 != 都将返回 FALSE。

于 2012-05-19T22:16:13.930 回答
0

问题是您正在比较一个字符串和一个整数,而 PHP 正在“帮助”将字符串转换为一个整数——整数零。0!='ts'评估为false,因为它在转换后最终进行的比较是0!=0. 您可以通过将数组的内容显式处理为字符串来防止这种情况:

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

这将进行比较'0'!='ts',正确评估为true。如果你传递 strval() 一个字符串,它会原封不动地返回它,所以无论你的数组中有什么,这都应该是安全的。

或者,正如 Samy Dindane 所说,您可以使用 !== 不会进行任何类型转换。

于 2012-05-19T22:43:16.070 回答