PHP:如果声明问题

时间:2012-05-19 22:14:36

标签: php

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

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

3 个答案:

答案 0 :(得分:3)

!=0评估为false。使用!==更多 strict

答案 1 :(得分:0)

IIRC等于0与!=的任何内容将返回FALSE。

答案 2 :(得分:0)

问题在于你要比较一个字符串和一个整数,并且PHP“有帮助”将字符串转换为整数 - 整数为零。 0!='ts'的评估结果为false,因为转化后最终的比较为0!=0。您可以通过将数组的内容显式地视为字符串来阻止这种情况:

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

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

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