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页面间传递参数实例代码
Jun 05 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
php实现httpRequest的方法
Mar 13 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
Symfony控制层深入详解
Mar 17 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 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实现图象锐化代码
2007/06/14 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
社会学专业求职信
2014/02/24 职场文书
法律进机关实施方案
2014/03/12 职场文书
校庆活动策划方案
2014/06/05 职场文书
三严三实对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书