php 查找数组元素提高效率的方法详解


Posted in PHP onMay 05, 2017

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_flipisset判断元素是否存在,在10万个元素的数组中比较1000次,运行时间需要约1.2毫秒

因此,对于大数组进行比较,使用array_flipisset方法会比in_array效率高很多。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
文章推荐系统(三)
Oct 09 PHP
一个域名查询的程序
Oct 09 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
3个PHP多维数组转为一维数组的方法实例
Mar 13 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
thinkPHP分页功能实例详解
May 05 #PHP
php cli模式下获取参数的方法
May 05 #PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 #PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 #PHP
PHP实现Session入库/存入redis的方法
May 04 #PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 #PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 #PHP
You might like
PHP循环获取GET和POST值的代码
2008/04/09 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
Python循环语句中else的用法总结
2016/09/11 Python
利用Python破解斗地主残局详解
2017/06/30 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
社区党员先进事迹
2014/01/22 职场文书
九年级历史教学反思
2014/01/27 职场文书
同事打架检讨书
2014/02/04 职场文书
驾驶员安全责任书
2014/07/22 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
事业单位年度考核评语
2014/12/31 职场文书
经典导游欢迎词
2015/01/26 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技