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桌面中心(二) 数据库写入
Mar 11 PHP
PHP源代码数组统计count分析
Aug 02 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
php根据年月获取季度的方法
Mar 31 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
twig模板常用语句实例小结
Feb 04 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
PHP批斗大会之缺失的异常详解
Jul 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实现Mysql读写分离
2013/06/28 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
Python列表list数组array用法实例解析
2014/10/28 Python
python开发之文件操作用法实例
2015/11/13 Python
Python作用域用法实例详解
2016/03/15 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Python中字符串与编码示例代码
2019/05/20 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python 变量初始化空列表的例子
2019/11/28 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
三好学生事迹材料
2014/12/24 职场文书
考研英语复习计划
2015/01/19 职场文书
运动会广播稿300字
2015/08/19 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL