PHP比较布尔值

PHP比较布尔值,php,Php,我想比较多维PHP数组中的字符串 我运行了调试器,调试器跳转到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($haystac

我想比较多维PHP数组中的字符串 我运行了调试器,调试器跳转到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,但我想知道为什么这不是自动完成的。

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 

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 

问题是,
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);
如果相等的话,这会给你正确的答案,如果不相等的话,这会给你错误的答案


问题是,
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);
如果相等的话,这会给你正确的答案,如果不相等的话,这会给你错误的答案


“6哪个应该是假的”。在PHP中并非如此。如果您使用一些您认为应该计算为
true
false
的示例输入值,这将有所帮助。您的期望值可能与我们的其他期望值不同。您应该注意的是,当字符串相同时,“stracecmp”返回0,否则返回有符号整数。整数值上的直接布尔比较可能是您困惑的根源。我如何从strcasecmp函数中获取布尔值,或者这是不可能的?@user3741086当字符串相等时,您希望它是
true
还是
false
。在PHP中并非如此。如果您使用一些您认为应该计算为
true
false
的示例输入值,这将有所帮助。您的期望值可能与我们的其他期望值不同。您应该注意的是,当字符串相同时,“stracecmp”返回0,否则返回有符号整数。整数值上的直接布尔比较可能是您困惑的根源。我如何从strcasecmp函数中获取布尔值,或者这是不可能的?@user3741086当字符串相等时,您希望它是
true
还是
false