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 相关文章推荐
我的论坛源代码(一)
Oct 09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php微信公众平台开发类实例
Apr 01 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
php微信公众号开发之现金红包
Apr 16 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实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php的ajax简单实例
2014/02/27 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
市场部规章制度
2014/01/24 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
2014年政协工作总结
2014/12/09 职场文书
投诉信格式范文
2015/07/02 职场文书
教师师德承诺书2016
2016/03/25 职场文书
JS setTimeout与setInterval的区别
2022/04/20 Javascript