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…
浏览: 126 标签:  ,  ,  ,  , 

斐讯 K3 路由器刷 OpenWRT LEDE 及固件收集下载

K3 上车已四个(多)月了,因为是三星闪存,梅林支持不好,折腾完就闲置。后来看网友说 K3 会漏油,觉得不可思议,就更加不想折腾它,只希望能顺利成功下车(K3)(2018.8 已翻车)。 斐讯 K3 OpenWrt LEDE 梅林固件大全:点击直达!!! 2019 斐讯K3 全版本 免降级、免拆机、免TTL 开启telnet …
浏览: 98 标签:  ,  ,  ,  , 

斐讯 K2 路由器 OpenWRT Padavan PandoraBox 潘多拉固件收集分享

如题,斐讯 K2 路由器 OpenWRT Padavan PandoraBox 潘多拉固件收集分享。斐讯 K2 路由器比较旧了,但是日常备用或者百兆家庭宽带(偶尔回去的农村家里)使用还是绰绰有余,性价比也不错。 ye61123 K2P 超精简 padavan 帖子:回归纯粹,多机型超精简padavan,K2仅2.99MB 简介:无任何扩展,只…
浏览: 52 标签:  ,  ,  ,  ,  ,  , 
浏览: 107 标签:  ,  ,  ,  , 

Comments:0

发表留言

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