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 xml实例 留言本
Mar 20 PHP
php 在文件指定行插入数据的代码
May 08 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 PHP
PHP rmdir()函数的用法总结
Jul 02 PHP
实例分析10个PHP常见安全问题
Jul 09 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
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python递归遍历列表及输出的实现方法
2015/05/19 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
入党综合考察材料
2014/06/02 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL