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边学边教》(01.开篇――准备工作)
Dec 13 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
Yii2 assets清除缓存的方法
May 16 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
Yii2语言国际化的配置教程
Aug 19 PHP
解决Laravel blade模板转义html标签的问题
Sep 03 PHP
php装饰者模式简单应用案例分析
Oct 23 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
手机端转换rem适应
2017/04/01 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python中的super用法详解
2015/05/28 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
python实现银行账户系统
2021/02/22 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
大学三年的自我评价
2013/12/25 职场文书
骨干教师培训感言
2014/01/16 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
房地产开盘策划方案
2014/02/10 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
迎新生标语大全
2014/10/06 职场文书
社区服务活动报告
2015/02/05 职场文书
护理自荐信
2019/05/14 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python