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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php学习之运算符相关概念
2011/06/09 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
python海龟绘图实例教程
2014/07/24 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Java分治归并排序算法实例详解
2017/12/12 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
python如何求圆的面积
2020/07/01 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
final, finally, finalize的区别
2012/03/01 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
《散步》教学反思
2014/03/02 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
python如何获取网络数据
2021/04/11 Python
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js