PHP中in_array 效率极其优化

时间 2013-12-26 12:05:20   LNMP100实验室 原文  http://www.lnmp100.com/1059

大家可能都用过in_array来判断一个数据是否在一个数组中,一般我们的数组可能数据都比较小,对性能没什么影响,所以也就不会太在意,但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现):

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;
}

关于in_array的执行效率分析可以查看: php中的in_array函数效率分析

PHP中in_array 效率及其优化相关推荐

  1. DRO:SFM任务中的深度循环优化器(阿里巴巴AI Lab)

    代码.论文地址:在公众号「3D视觉工坊」,后台回复「DRO」,即可直接下载. Motivation: 解决一个优化问题,常见的优化器比如梯度下降法, 牛顿法等, 一般会先计算梯度------>再 ...

  2. 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略

    李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...

  3. Mysql中查询速度的优化

    2019独角兽企业重金招聘Python工程师标准>>> mysql中查询速度的优化 1.查看每一个表的数据量 2.left join的时候尽量减少表的大小,通过临时表,查询条件去限制 ...

  4. Worktile:DNA中带有“效率”精神的协同软件企业

    虽然在国内协同工具的风潮尚未完全普及,但你一定对Worktile这个国内团队自创的协同工具不陌生.作为产品打造者,看不见用户,却要摸清楚用户使用产品的习惯或遇到的困难,这在以前难以想像.我们通过Wor ...

  5. 关于程序中查询效率的问题

    关于程序中查询效率的问题 在程序编码过程中会和很多的各种各样的数据打交道,正确的操纵数据是每个程序员的必备功课,也是最根本的.但是如何快速高效的查询出自己所需要的数据或者说符合条件的数据则显得至关重要 ...

  6. oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...

  7. 数据仓库中的SQL性能优化 - Hive篇

    一个Hive查询生成多个map reduce job,一个map reduce job又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针 ...

  8. 语音识别维特比解码_HMM连续语音识别中Viterbi算法的优化及应用

    HMM 连续语音识别中 Viterbi 算法的优化及应用 袁俊 [期刊名称] <电子技术> [年 ( 卷 ), 期] 2001(028)002 [摘要] 基于 HMM 连续语音识别系统声学 ...

  9. 深度解读Microsoft Build 2020:提升开发效率,优化开发环境

    Microsoft Build 2020 在众多新产品与技术发布中圆满落幕 但身为开发技术人深知 技术世界的更迭.求索却从未止步 唯有不断提升自身技能栈创新 方能从技术浮沉中获得更多养分 让技术予力世 ...

最新文章

  1. 神经网络设计与分析之如何知道权重的利用率
  2. 4000字干货分享|一文学会搭建炫酷可视化大屏
  3. 【Linux安全】安全口令策略设置
  4. Google推出了一个名为“Google Public DNS”的域名解析系统
  5. 【笔记】java命令如何运行jar包
  6. php读取写入,php操作文件(读取写入文件)
  7. u盘为什么要安全弹出?丢失的数据怎么恢复?
  8. 在电脑浏览器上怎样对一整个页面进行完整的截图?(整站截图)
  9. 零售航母沃尔玛公布业绩:喜忧参半
  10. win10怎么把网络里面计算机删除,win10怎么删除多余的网络连接 win10网络连接不可用怎么回事...
  11. informix-系统视图
  12. mysql查询用户留存语法(用户留存和用户留存率问题)
  13. 专访阿里巴巴毕玄:异地多活数据中心项目的来龙去脉
  14. 免费计算机网络同传系统,ghost网络同传系统.doc
  15. 输掉战役赢战争(博弈论的诡计)
  16. javaUDP网络传输入门
  17. 转:你的领导激情在哪里?发现它并为之而奋斗
  18. 电机分类及运行状态-同步、异步、直流
  19. 改写《python数据挖掘入门与实践》第九章Gutenberg书籍下载代码
  20. 9套Android实战经典项目资料分享给大家

热门文章

  1. Python 爬取东京奥运会奖牌榜!中国原来这么厉害!
  2. 图像去雾(二)Retinex图像增强算法
  3. 判断素数(java语言编写)
  4. 【百日刷题计划 第一天】——熟悉语法 语法基础题
  5. HTTP Status 500 - Error instantiating servlet class com.oymn.web.LoginServlet
  6. SCRT连不上本地虚拟机的linux解决方法
  7. BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明
  8. 刷题汇总(三)leetcode 精选50题 C++答案总结
  9. 理财实践之国债逆回购货币基金(积少成多,赚大钱)
  10. 即时通讯开发之WebRTC服务器是如何联接通话的