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])){
        //
    }
}
扫描二维码关注公众号,回复: 6241730 查看本文章

  速度瞬间起来了~

文章来源转载http://www.php.cn/php-weizijiaocheng-399278.html

猜你喜欢

转载自blog.csdn.net/weixin_42637737/article/details/88018086