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+MySQL的聊天室设计
Oct 09 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
php双向队列实例讲解
Nov 17 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获取网络上文件
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
Python中的self用法详解
2019/08/06 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
应届护士推荐信
2013/11/16 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书