PHP strcasecmp与空字符串等于true?

时间:2011-06-19 22:29:16

标签: php string

基本上我有代码:

echo strcasecmp('hello', ' ') ? 'true' : 'false';

我不太明白,我期待这里的结果是假的而不是真的,因为字符串不相等......

还有另一种更好的方法来比较INSENSITIVE案例中的字符串吗?

3 个答案:

答案 0 :(得分:10)

来自http://php.net/manual/en/function.strcasecmp.php

  

int strcasecmp(string $ str1,string $ str2)

     

返回<如果str1小于str2,则为0; >如果str1大于str2则为0,如果它们相等则为0。

你需要像

那样做
echo strcasecmp('hello', ' ') == 0 ? 'true' : 'false';

答案 1 :(得分:3)

这应该是

echo (strcasecmp('hello', ' ') === 0) ? 'true' : 'false';

如果两个字符串相等,strcasecmp将返回0。

http://uk3.php.net/strcasecmp

答案 2 :(得分:1)

你错误地解释了结果。 strcasecmp返回的内容,according to the docs是一个数字,如果字符串不相等则不等于零,如果它们相等则为零。如您所知,在PHP中,零对应于false,非零对应于true。因此,您的测试的正确版本

echo (strcasecmp('hello', ' ') === 0) ? 'true' : 'false';

或者,

echo strcasecmp('hello', ' ') ? 'false' : 'true';

我更喜欢第一个,更加冗长,并且不包含对布尔值的任何隐式类型转换。