我想比较多维PHP ARRAY中的字符串 我运行调试器,它跳转到if条件,但在我看来它不应该。
$strEmpty = $this->areStringsEmpty($needle, $haystack[$i]); // FALSE after method call
$one=strcasecmp($haystack[$i][0],$needle[0]); // evaluates to 6 , which shoult be FALSE
$two=strcasecmp($haystack[$i][1], $needle[1]); //evaluates to 2 , which alse should be false
if (!$strEmpty && $one && $two) { // TRUE && FALSE && FALSE
return TRUE;
}
为什么会这样? 我知道我可以在条件下检查0,但我想知道为什么这不会自动完成。
答案 0 :(得分:2)
strcasecmp
返回0。要在字符串匹配时获得布尔值true
,您可以执行此操作。
$one=(strcasecmp($haystack[$i][0],$needle[0]) === 0); //TRUE when === 0
$two=(strcasecmp($haystack[$i][1], $needle[1]) === 0); //TRUE when === 0
答案 1 :(得分:1)
问题是,strcasecmp
返回数字。因此,如果返回值大于或小于0,它将为true
。
输入:
$var1 = "Hello";
$var2 = "hello2";
if (strcasecmp($var1, $var2) == true) {
var_dump(strcasecmp($var1, $var2));
}
输出:
int(-1)
正如你所看到的,它是-1,但这是真的。
您只需在strcasecmp
附近添加大括号。
$one = (strcasecmp($haystack[$i][0], $needle[0]) == 0);
$two = (strcasecmp($haystack[$i][1], $needle[1]) == 0);
如果它相等,这将给你真实,如果不相等则为假。