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,不用COM,生成excel文件
Oct 09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php简单防盗链实现方法
Jul 29 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
php实用代码片段整理
Nov 12 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 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
无线电广播的开始
2002/01/30 无线电
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
React组件的三种写法总结
2017/01/12 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
由浅入深讲解python中的yield与generator
2017/04/05 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python 元组的使用方法
2020/06/09 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
Linux文件操作命令都有哪些
2015/02/27 面试题
函授本科个人自我鉴定
2014/03/25 职场文书
会计专业自荐信
2014/06/03 职场文书
主题党日活动总结
2014/07/08 职场文书
办理信用卡工作证明
2014/09/30 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python