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:风雨欲来 路在何方?
Oct 09 PHP
用PHP4访问Oracle815
Oct 09 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
php获取文件大小的方法
Feb 26 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
JS判断数组那点事
2017/10/10 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python是编译运行的验证方法
2015/01/30 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python实现猜数字小游戏
2020/03/24 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
Overload和Override的区别
2012/09/02 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
小学竞选班长演讲稿
2014/09/09 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL