我在使用 PHP 函数时发现了一些奇怪的行为in_array()
。我有一个像这样的数组:
$arr = [TRUE, "some string", "something else"];
现在如果我想检查是否"test"
显然不在数组中,但是in_array()
仍然返回 TRUE,这是为什么呢?
$result = in_array("test", $arr);
var_dump($result); //Output: bool(true)
使用时也会发生同样的情况array_search()
:
$result = array_search("test", $arr);
var_dump($result); //Output: int(0)
我想也许数组中的值 TRUE 会自动导致函数为每个结果返回 TRUE,而不检查数组的其余部分,但我找不到任何文档表明这个非常奇怪的功能。
函数的这种行为in_array() http://php.net/manual/en/function.in-array.php and array_search() http://php.net/manual/en/function.array-search.php不是错误,而是有据可查的行为。
这两个函数都有第三个可选参数,称为$strict
默认情况下为 FALSE:
bool in_array (混合 $needle , 数组 $haystack[,布尔 $strict = FALSE ] )
混合 array_search ( 混合 $needle , 数组 $haystack[,布尔 $strict = false ] )
现在这意味着默认情况下两个函数都使用松散的(==
) 比较来比较值。所以他们只检查值是否相同afterPHP 类型杂耍并且不检查类型。因为在你的例子中TRUE == "any none emtpy string"
评估结果为 TRUE。
因此,通过在调用函数时将第三个参数设置为 TRUE,您可以说 PHP 应该使用 strict(===
)比较,并且在比较时应该检查值和值的类型。
将此视为参考:PHP 相等(== 双等于)和恒等(=== 三等)比较运算符有何不同? https://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)