数组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'。 –
向谁低估:你为什么不解释原因? –