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
用来给图片加水印的PHP类
Apr 09 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
php zip文件解压类代码
Dec 02 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
浅谈php扩展imagick
Jun 02 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
php自定义hash函数实例
May 05 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
详谈php静态方法及普通方法的区别
Oct 04 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实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
JS变量及其作用域
2017/03/29 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python语法快速入门指南
2015/10/12 Python
python web框架学习笔记
2016/05/03 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
大学生求职自我评价
2014/01/16 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
安全责任书模板
2014/07/22 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
我的长征观后感
2015/06/09 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
学习经验交流会总结
2015/11/02 职场文书