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 相关文章推荐
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
Jun 26 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
php获取json数据所有的节点路径
May 17 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP自定义函数实现数组比较功能示例
Oct 19 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
php查询内存信息操作示例
May 09 PHP
php swoft框架实例用法
Dec 22 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP 类型转换函数intval
2009/06/20 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
jQuery 表格工具集
2010/04/25 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
jquery选择器使用详解
2014/04/08 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
python封装对象实现时间效果
2020/04/23 Python
Python 字符串操作方法大全
2014/03/11 Python
一看就懂得Python的math模块
2018/10/21 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
小加工厂管理制度
2014/01/21 职场文书
自荐信模板大全
2015/03/27 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript