【in_array和array_search】PHP中的in_array和array_search【原创】
来源:互联网 发布:买隐形眼镜必知常识 编辑:程序博客网 时间:2024/06/05 21:11
in_array有个地方需要注意一下,见以下代码:
$array = ['a', 'b', 'c'];var_dump(in_array(0, $array)); // 返回bool(true),也就相当于数组中有0var_dump(in_array(0, $array, true)); // 返回bool(false),也就相当于数组中无0var_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 0
- 【in_array和array_search】PHP中的in_array和array_search【原创】
- php中array_search和in_array有什么区别
- php数组查找函数in_array()、array_search()、array_key_exists()使用实例
- 关于in_array() foreach array_search() 的性能对比
- array_search()
- php中的in_array函数
- 对比4个函数 isset in_array array_search array_key_exists 速率对比及初步分析原因
- php的in_array和jQuery的inArray
- php in_array
- php in_array
- js 实现PHP中的in_array()
- in_array()
- in_array()
- in_array()
- PHP函数in_array、array_key_exists和isset效率分析
- php使用array_search函数查找
- php的array_search函数说明
- php中的in_array函数效率分析
- Android常用控件(Widget)
- [bzoj3064]Tyvj 1518 CPU监控 线段树&排行榜垫底留念
- Tensorflow Save
- ContentProvider工作机制
- BZOJ 1145: [CTSC2008]图腾totem 数据结构维护,思维题
- 【in_array和array_search】PHP中的in_array和array_search【原创】
- HDU 1001
- HTML(进阶)
- 服务器内部跳转(请求转发)和请求重定向的区别
- 我的文章被推荐到CSDN首页
- java单例模式
- python正则表达式二:literal、re1|re2 和 .
- 互联网公司运营模式的分析与学习(一)
- Codeforces #831A: Unimodal Array 题解