PHP 数组查找 in_array 性能优化

0 Comment

据说 PHP in_array 大数据量下很慢,如何优化?老头找到几篇教程,记录过来了,有需要参考一下。

PHP 高效率 数组查找 - 替换 in_array

来源:wintop

作者在处理一个 1000 多个元素数组,用 PHP in_array 计算,效率很差,循环 100 万次要几十秒。同时用 array_flip 反转函数,判断数组 key,通过 100 万次运算,效果不好,也是几十秒;也有用 implode 拼接成字符串,然后 stripos 查出位置,返回是否包含,效率也是很差,几十秒。

下面是作者写的方法,可替换 PHP in_array ,效率提升上百倍:

function inArray(string $str,array $strArray){
foreach($strArray as $v){
if(str_replace($v,$str,'')=='' && strlen($v)==strlen($v)){
return true;
}
}
return false;
}

in_array 数组 优化思考

来源:时光博客 ·· 原文长截图

结论:

  • 如果明确数据类型,in_array 第三个参数建议一直开启;
  • 如果搜索单一字符串,基数 100 以内,可以选择 isset(array_flip()), 基数在 100 以上,则选择 in_array() 更好;
  • 如果是搜索数组,选择 isset(array_flip()) 会更好。

PHP 性能优化:in_array 和 isset 在大数组查询中耗时相差巨大,以及巧妙使用 array_flip

来源:根号五 ·· 原文长截图

作者在 PHP 业务开发中,发现一个问题:两个较大数组(20万+元素),遍历其中一个 $a,另一个数组 $b 用于查找元素,速度非常之慢,加上业务处理,耗时快半个小时之久。

比如:

foreach($a as $val){
if(in_array($xx, $b)){
//
}
}

排查后发现 in_array() 速度很慢。怎么样优化呢?在 PHP 数组中,如果用 in_array 或者 array_search 这种寻找数组 value值,PHP 会整个遍历一遍查询,这样当数组很大时,当然会很慢。

而考虑使用 array_key_exists 或者 语言构造器 isset 则会很快。但是这两个用法需要 value 是 key 才行,非常幸运,PHP 是世界上最好的语言。array_flip() 提供这个用法。

优化代码,速度瞬间起飞:

$c = array_flip($b);
foreach($a as $val){
if(isset($c[$xx])){
//
}
}

除非注明,垃圾站文章均为网络收集,本文地址 https://cyhour.com/1813/,转载时烦请以链接形式注明原始出处。
声明:我们不销售主机,任何VPS主机均有跑路风险且需定期备份,防止数据丢失。信息以实际为准,评测仅供参考不代表权威!
🍄:Netflix 奈飞 YouTube 合租

Gravatar 头像被墙及解决方案 Gravatar 头像国内镜像地址大全

Gravatar 头像真是一言难尽,时而正常时而抽风时而无法访问……就一个 Gravatar 头像,这有啥好强(现代通假字)的呢?(据说是被其它服务连累?) 解决办法 - 调用 ssl/cn 头像链接 历史解决办法:调用 ssl 头像链接——https还是没被墙的,而且速度还不错,直接调用这个最简单了。主题 functi…
浏览: 24 标签:  ,  ,  ,  , 

Redmi Note 9 4G 刷机欧洲EU版净化去广告

虽然口水苹果十三香,但是眼下囊中确实只有红米……到手不用 1000 大洋,试试也无妨,实在不行再找银行/东哥要十三香。 入手 Redmi Note 9 4G 缘由:领导的微信机 iPhone SE 一代确实很老了(再过两个月就开始第六个年头了),没有换过电池,进过水修过一次,现在经常尿崩突然就关机了得插上…

使用 GoAccess 分析 Nginx 日志

最近发现博客加载图片大多时候都是龟速,想过换服务器,换回主机(比如传说中的外贸主机 SiteGround),图片上 CDN……想了一圈,最终什么都没动,一是穷二是懒三是图片多茄大的水文并不多,先这样吧,实在不行再折腾。倒是忍不住折腾了一下 GoAccess 分析 Nginx 日志,分析了一圈,没什么用。 记录…
浏览: 147 标签:  ,  ,  , 

WordPress 纯代码实现彩色标签云及简单优化配置

WordPress 自带标签云小工具,侧栏直接添加即可,就是默认样式有点平淡,可以加点代码实现彩色标签云及简单优化一下。 WordPress 纯代码实现彩色标签云 代码丢到 WordPress 主题 functions.php 文件即可: //彩色标签云 tag cloudfunction theme_color_cloud_hook($text) { $text = preg_rep…
浏览: 155 标签:  ,  ,  ,  , 
浏览: 71 标签:  ,  ,  ,  , 

Comments:0

发表留言

Vultr 送$100,搬瓦工年付最低$49,优惠码 BWH3HYATVBJW,更多推荐VPS信息