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 相关文章推荐
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
php中全局变量global的使用演示代码
May 18 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
php简单防盗链实现方法
Jul 29 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 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
什么是MVC,好东西啊
2007/05/03 PHP
php分页函数示例代码分享
2014/02/24 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
php常用字符函数实例小结
2016/12/29 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
学习python (2)
2006/10/31 Python
python格式化字符串实例总结
2014/09/28 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
python中time、datetime模块的使用
2020/12/14 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
小学运动会表扬稿
2014/01/19 职场文书
学校工作推荐信范文
2014/07/11 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
纪委立案决定书
2015/06/24 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书