为了账号安全,请及时绑定邮箱和手机立即绑定

PHPin_Array()/Array_Search()奇数行为

PHPin_Array()/Array_Search()奇数行为

PHP
慕标5832272 2019-07-02 14:37:15
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,但是我找不到任何文档来说明这个非常奇怪的功能。
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

函数的这种行为in_array()array_search()不是错误,而是记录在案的行为。

这两个函数都有第三个可选参数,名为$strict默认情况下是假的:

Bool in_Array(混合$穿刺针,数组$hawack)[,严厉的,错误的] )


混合数组搜索(混合$针,数组$hayack)[,严厉的,错误的] )

这意味着,在默认情况下,这两个函数都使用松散的(==)比较,以比较值。所以他们只检查值是否相同PHP类型杂耍和不检查类型。因为在你的例子中TRUE == "any none emtpy string"计算为真。

因此,通过在调用函数时将第三个参数设置为true,您会说PHP应该使用严格的(===)比较,比较时应检查值和值的类型。

将此作为参考:PHP相等(=双等于)和恒等(=三倍等于)比较运算符有何不同?


查看完整回答
反对 回复 2019-07-02
?
呼唤远方

TA贡献1856条经验 获得超11个赞

你说得对,布尔值确实可以导致这一点。设置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


查看完整回答
反对 回复 2019-07-02
  • 2 回答
  • 0 关注
  • 409 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信