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调用三种数据库的方法(3)
Oct 09 PHP
Session的工作方式
Oct 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
php的一些小问题
Jul 03 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
python游戏开发的五个案例分享
2020/03/09 Python
python同时遍历两个list用法说明
2020/05/02 Python
python 如何设置守护进程
2020/10/29 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
历史博物馆观后感
2015/06/05 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
基于docker安装zabbix的详细教程
2022/06/05 Servers
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL