2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题


Posted in PHP onApril 08, 2014

但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现):

1.数组key与value翻转,通过isset判断key是否存在于数组中

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $flipArray = array_flip($array);
    return isset($flipArray[$item]);
}

大家可能也会问为什么不用 array_key_exists 来做判断二用isset呢? 下面看下array_key_exists() 与 isset() 的对比:
isset()对于数组中为NULL的值不会返回TRUE,而array_key_exists()会。
<?php
$search_array = array('first' => null, 'second' => 4);
// returns false
isset($search_array['first']);
// returns true
array_key_exists('first', $search_array);
?>

2.用implode连接,直接用strpos判断

用implode函数+逗号连起来,直接用strpos判断。php里面字符串取位置速度非常快,尤其是在大数据量的情况下。不过需要注意的是首尾都要加”,” ,这样比较严谨。如: ,user1,user2,user3, 查找的时候,查,user1,。还有strpos要用!== false,因为第一个会返回0。示例如下:

/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(',', $array);
    $str = ',' . $str . ',';
    $item = ',' . $item . ',';
    return false !== strpos($item, $str) ? true : false;
}

PHP 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
PHP合并数组+与array_merge的区别分析
Aug 01 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 #PHP
关于PHP的curl开启问题探讨
Apr 08 #PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 #PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 #PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 #PHP
php实现telnet功能示例
Apr 08 #PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 #PHP
You might like
mysql 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
Python实现图片拼接的代码
2018/07/02 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
优秀中专生推荐信
2013/11/17 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
世博会口号
2014/06/20 职场文书
2014年团委工作总结
2014/11/13 职场文书
学生保证书
2015/01/16 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js