PHP比较布尔值

时间:2017-03-20 09:51:57

标签: php

我想比较多维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,但我想知道为什么这不会自动完成。

2 个答案:

答案 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);

如果它相等,这将给你真实,如果不相等则为假。

Example