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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 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反弹shell实现代码
2009/04/22 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python实现机器人卡牌
2019/10/06 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
安踏官方商城:anta.cn
2019/12/16 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
保安员岗位职责
2013/11/17 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
回复函格式及范文
2015/07/14 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers