我在使用PHP函数时发现了一些奇怪的行为in_array()。我有一个像这样的数组:
in_array()
$arr = [TRUE, "some string", "something else"];
现在,如果我要检查"test"数组中是否存在它,显然不是,但是in_array()仍然返回TRUE,为什么呢?
"test"
$result = in_array("test", $arr); var_dump($result); // **Output: bool(true)**
使用时会发生相同的事情array_search():
array_search()
$result = array_search("test", $arr); var_dump($result); // **Output: int(0)**
我认为也许数组中的值TRUE会自动导致该函数为每个结果返回TRUE,而不检查数组的其余部分,但是我找不到任何文档来表明这种非常奇怪的功能。
该函数的这种行为in_array()而array_search()不是一个错误,而是有据可查的行为。
这两个函数都有一个名为的第三个可选参数$strict,默认情况下为FALSE:
$strict
bool in_array(混合$ needle,array $ haystack [,bool $ strict = FALSE] ) 混合array_search(混合$ needle,数组$ haystack [,bool $ strict = false] )
bool in_array(混合$ needle,array $ haystack [,bool $ strict = FALSE] )
混合array_search(混合$ needle,数组$ haystack [,bool $ strict = false] )
现在,这意味着默认情况下,两个函数都使用松散(==)比较来比较值。因此,它们仅 在 PHP类型变戏法 之后 检查值是否相同,而不检查类型。因此,在您的示例中,TRUE == "any none emtpy string"计算结果为TRUE。
==
TRUE == "any none emtpy string"
因此,通过在调用函数时将第3个参数设置为TRUE,可以说PHP应该使用strict(===)比较,并且在比较时应该检查值和值的类型。
===