1.php in_array 方法说明
PHP 查找数组元素是否存在,一般会使用 in_array 方法。
- bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
参数说明:
needle
待搜索的值,如果 needle 是字符串,比较是区分大小写的。
haystack
用来比较的数组
strict
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同
返回值
如果找到 needle 则返回 TRUE,否则返回 FALSE。
2.in_array 查找元素效率
当比较的数组 haystack 较大时,in_array 效率会很低
例子:使用 in_array 对有 10 万个元素的数组进行 1000 次比较
- <?php
- $arr = array();
- // 创建10万个元素的数组
- for($i=0; $i<100000; $i++){
- $arr[] = $i;
- }
- // 记录开始时间
- $starttime = getMicrotime();
- // 随机创建1000个数字使用in_array比较
- for($j=0; $j<1000; $j++){
- $str = mt_rand(1,99999);
- in_array($str, $arr);
- }
- // 记录结束时间
- $endtime = getMicrotime();
- echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
- /**
- * 获取microtime
- * @return float
- */
- function getMicrotime(){
- list($usec, $sec) = explode(' ', microtime());
- return (float)$usec + (float)$sec;
- }
- ?>
run time:2003.6449432373ms
使用 in_array 判断元素是否存在,在 10 万个元素的数组中比较 1000 次,运行时间需要约 2 秒
3. 提高查找元素效率方法
我们可以先使用 array_flip 进行键值互换,然后使用 isset 方法来判断元素是否存在,这样可以提高效率。
例子:使用 array_flip 先进行键值互换,再使用 isset 方法判断,在 10 万个元素的数组中比较 1000 次
- <?php
- $arr = array();
- // 创建10万个元素的数组
- for($i=0; $i<100000; $i++){
- $arr[] = $i;
- }
- // 键值互换
- $arr = array_flip($arr);
- // 记录开始时间
- $starttime = getMicrotime();
- // 随机创建1000个数字使用isset比较
- for($j=0; $j<1000; $j++){
- $str = mt_rand(1,99999);
- isset($arr[$str]);
- }
- // 记录结束时间
- $endtime = getMicrotime();
- echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
- /**
- * 获取microtime
- * @return float
- */
- function getMicrotime(){
- list($usec, $sec) = explode(' ', microtime());
- return (float)$usec + (float)$sec;
- }
- ?>
run time:1.2781620025635ms
使用 array_flip 与 isset 判断元素是否存在,在 10 万个元素的数组中比较 1000 次,运行时间需要约 1.2 毫秒
因此,对于大数组进行比较,使用 array_flip 与 isset 方法会比 in_array 效率高很多。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持就爱阅读!
来源: http://www.92to.com/bangong/2017/05-08/21476352.html