2012-05-19 72 views
0

数组resAlloc包含10列和5行。所有条目都等于0.所以,我期望以下IF语句为TRUE,但由于某种原因它是错误的......为什么?PHP:如果语句问题

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

回答

3

!=评估0false。使用!==这是更多严格

+0

这是如何解释问题的? '0!='ts''和'false!='ts''都应该是“真”,因此if语句应该是真的。 – octern

+0

这是不正确的。 'false && false'等于'false'。 –

+0

向谁低估:你为什么不解释原因? –

0

IIRC东西等于0与!=将返回FALSE。

+0

这是不正确的。 '0!= 1'返回'true'(谢天谢地!)。我认为这是一个将字符串与整数进行比较的问题 - 字符串被转换为整数零,所以最后两个都是相等的! – octern

+0

我说IIRC,并不确定。 – alexpja

0

问题是,你正在比较一个字符串和一个整数,PHP是“有用的”将字符串转换为一个整数 - 整数零。 0!='ts'评估为false,因为它在转换后最终做的比较是0!=0。你可以明确地处理你的数组的内容作为字符串防止这种情况:

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

这会做的比较'0'!='ts',其正确的计算结果为true。如果你传递strval()一个字符串,它将不会改变它,所以无论数组中的内容如何,​​这都应该是安全的。另外,正如Samy Dindane所说,你可以使用!==,它不会做任何类型转换。