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 相关文章推荐
PHP 函数执行效率的小比较
Oct 17 PHP
PHP开发不能违背的安全规则 过滤用户输入
May 01 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
php封装的表单验证类完整实例
Oct 19 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
PHP7修改的函数
Mar 09 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中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
python字典序问题实例
2014/09/26 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Python实现井字棋小游戏
2020/03/09 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Python 如何测试文件是否存在
2020/07/31 Python
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
银行学习十八大感想
2014/01/11 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
教师自我反思材料
2014/02/14 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
西式结婚主持词
2014/03/14 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
职称评定个人总结
2015/03/05 职场文书
社区国庆节活动总结
2015/03/23 职场文书
工作犯错保证书
2015/05/11 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书