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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
PHP SQLite类
May 07 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
yii中widget的用法
Dec 03 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
PHP代码重构方法漫谈
Apr 17 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
PHP中的正规表达式(一)
2006/10/09 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
jQuery中next()方法用法实例
2015/01/07 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python调用新浪微博API项目实践
2014/07/28 Python
解读Python中degrees()方法的使用
2015/05/18 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python 字典与字符串的互转实例
2017/01/13 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Flask框架配置与调试操作示例
2018/07/23 Python
python微信好友数据分析详解
2018/11/19 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
预备党员综合考察材料
2014/05/31 职场文书
本科生自荐信
2014/06/18 职场文书