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 相关文章推荐
php5 图片验证码实现代码
Dec 11 PHP
如何用php获取程序执行的时间
Jun 09 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
深入解析php中的foreach函数
Aug 31 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
php修改指定文件后缀的方法
Sep 11 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
PHP实现事件机制的方法
Jul 10 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
制作特殊字的脚本
2006/06/26 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Python绘制3D图形
2018/05/03 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Python中url标签使用知识点总结
2020/01/16 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
秋季运动会加油稿200字
2014/01/11 职场文书
代办社保委托书范文
2014/10/06 职场文书
生死抉择观后感
2015/06/09 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript