猿问

PHPin_Array()/Array_Search()奇数行为

PHPin_Array()/Array_Search()奇数行为

我在使用PHP函数时发现了一些奇怪的行为in_array()..我有这样一个数组:

$arr = [TRUE, "some string", "something else"];

如果我想检查一下"test"在数组中,它显然不是,但是in_array()仍然返回真,为什么?

$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,但是我找不到任何文档来说明这个非常奇怪的功能。


慕标5832272
浏览 410回答 2
2回答

慕姐8265434

函数的这种行为in_array()和array_search()不是错误,而是记录在案的行为。这两个函数都有第三个可选参数,名为$strict默认情况下是假的:Bool in_Array(混合$穿刺针,数组$hawack)[,严厉的,错误的] )混合数组搜索(混合$针,数组$hayack)[,严厉的,错误的] )这意味着,在默认情况下,这两个函数都使用松散的(==)比较,以比较值。所以他们只检查值是否相同后PHP类型杂耍和不检查类型。因为在你的例子中TRUE == "any none emtpy string"计算为真。因此,通过在调用函数时将第三个参数设置为true,您会说PHP应该使用严格的(===)比较,比较时应检查值和值的类型。将此作为参考:PHP相等(=双等于)和恒等(=三倍等于)比较运算符有何不同?

呼唤远方

你说得对,布尔值确实可以导致这一点。设置strict标志在in_array函数,这样也可以将类型元素的检查(基本上与使用===):if (in_array("username", $results, true)) // do something if (in_array("password", $results, true)) // do something if (in_array("birthday", $results, true)) // do something
随时随地看视频慕课网APP
我要回答