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版(2)
Oct 09 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
openPNE常用方法分享
Nov 29 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python浪漫表白源码
2019/04/05 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
numba提升python运行速度的实例方法
2021/01/25 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
护士的岗位职责
2013/12/04 职场文书
应急处置方案
2014/06/16 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫