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 相关文章推荐
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
ASP和PHP都是可以删除自身的
Apr 09 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
php学习之 数组声明
Jun 09 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php解决安全问题的方法实例
Sep 19 PHP
goto语法在PHP中的使用教程
Sep 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
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
yii中widget的用法
2014/12/03 PHP
php生成word并下载代码实例
2019/03/15 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
详解python基础之while循环及if判断
2017/08/24 Python
Python 实现微信防撤回功能
2019/04/29 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
如何通过Python实现标签云算法
2019/07/02 Python
python动态视频下载器的实现方法
2019/09/16 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
医院实习介绍信
2014/01/12 职场文书
给女儿的表扬信
2014/01/18 职场文书
中药学专业求职信
2014/05/31 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
交通安全温馨提示语
2015/07/14 职场文书
德劲DE1105机评
2022/04/05 无线电