PHP in_array()/ array_search()奇怪的行为
我在使用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()
而array_search()
不是一个错误,而是有据可查的行为。
这两个函数都有一个名为的第三个可选参数$strict
,默认情况下为FALSE:
bool in_array(混合$ needle,array $ haystack )
混合array_search(混合$ needle,数组$ haystack )
现在,这意味着默认情况下,两个函数都使用松散(==
)比较来比较值。因此,它们仅 在 PHP类型变戏法 之后
检查值是否相同,而不检查类型。因此,在您的示例中,TRUE == "any none emtpy string"
计算结果为TRUE。
因此,通过在调用函数时将第3个参数设置为TRUE,可以说PHP应该使用strict(===
)比较,并且在比较时应该检查值和值的类型。
以上是 PHP in_array()/ array_search()奇怪的行为 的全部内容, 来源链接: utcz.com/qa/415206.html