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防攻击代码升级版
Dec 29 PHP
PHP中其实也可以用方法链
Nov 10 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php实现encode64编码类实例
Mar 24 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
Dec 08 PHP
php实现websocket实时消息推送
Mar 30 PHP
php时间戳转换代码详解
Aug 04 PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 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函数的常用方法及注意之处小结
2011/07/10 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
three.js 入门案例详解
2018/01/23 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python实现保存网页到本地示例
2014/03/16 Python
Python标准库os.path包、glob包使用实例
2014/11/25 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
python使用mysql的两种使用方式
2018/03/07 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
给幼儿园老师的表扬信
2014/01/19 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年班务工作总结
2014/12/02 职场文书
财务管理制度范本
2015/08/04 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL