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 checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP copy函数使用案例代码解析
Sep 01 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
ThinkPHP路由详解
2015/07/27 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
python开发简易版在线音乐播放器
2017/03/03 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python机器学习之贝叶斯分类
2018/03/26 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
使用python实现简单五子棋游戏
2019/06/18 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
入党申请自荐书范文
2014/02/11 职场文书
实习单位评语
2014/04/26 职场文书
安全演讲稿大全
2014/05/09 职场文书
十八大演讲稿
2014/05/22 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
2016教师节问候语
2015/11/10 职场文书
《青山不老》教学反思
2016/02/22 职场文书
《海上日出》教学反思
2016/02/23 职场文书