【in_array和array_search】PHP中的in_array和array_search【原创】

in_array有个地方需要注意一下,见以下代码:
$array = ['a', 'b', 'c'];

var_dump(in_array(0, $array));      // 返回bool(true),也就相当于数组中有0	

var_dump(in_array(0, $array, true));      // 返回bool(false),也就相当于数组中无0		

var_dump(array_search(0, $array));  // 返回int(0),也就是第一个值的下标

var_dump(array_search(0, $array, true));  // 返回false


manual的说明如下:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )


参数 

needle
    待搜索的值。

haystack
    待搜索的数组。

strict
    如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。


原因: 在比较前,PHP强制转换了类型
在PHP中,当string的类型的数据和int类型的数据进行对比的时候,会强制把string转换为int,而如果string的类型数据第一个数字,就会被转换为0,即:
echo (int)'aaa';
echo intval('aaa');

会输出0,所以就相当于判断in_array(0, [0, 0, 0]);返回true
扩展:还有一种情况是这样:
in_array('a', [true, 'b', 'c'])       // 返回bool(true),相当于数组里面有字符'a'
array_search('a', [true, 'b', 'c'])   // 返回int(0),相当于找到了字符'a'

也是同样的道理,string类型转换为boolen值的话是true。


总结:所以需要用in_array或者是array_search的时候,尽量把第三个参数设置为true,另外呢,如果设置第三个参数为true的话,那么在查找的时候,会直接对比类型和值,避免了PHP的自动转换类型,性能会快很多。不过呢,数组查询呢,还是尽量使用isset函数或者是array_key_exists函数来代替。

注意:我在Windows和Linux里面测试了in_array和array_search的耗时,in_array和array_search的耗时速度基本差不多,差别并不大,另外,如果这两个函数第三个参数为true的话,确实是比不加第三个参数或者是第三个参数设置为false的快,快1倍差不多。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值