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])){
        //
    }
}

 

  速度瞬间起来了~

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是对于在PHP的一些数组函数的作用和简单用法举例: 1. array_merge(): 将一个或多个数组合并为一个数组。 ```php $array1 = array('red', 'green'); $array2 = array('blue', 'yellow'); $result = array_merge($array1, $array2); print_r($result); // 输出:Array ( [0] => red [1] => green [2] => blue [3] => yellow ) ``` 2. array_flip(): 交换数组的键和值。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); $result = array_flip($array); print_r($result); // 输出:Array ( [1] => a [2] => b [3] => c ) ``` 3. array_combine(): 创建一个新数组使用一个数组的值作为键名,另一个数组的值作为键值。 ```php $keys = array('a', 'b', 'c'); $values = array(1, 2, 3); $result = array_combine($keys, $values); print_r($result); // 输出:Array ( [a] => 1 [b] => 2 [c] => 3 ) ``` 4. array_chunk(): 将一个数组分割成多个数组,每个数组包含指定数量的元素。 ```php $array = array('a', 'b', 'c', 'd', 'e'); $result = array_chunk($array, 2); print_r($result); // 输出:Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) ) ``` 5. array_fill(): 用给定的值填充数组。 ```php $result = array_fill(0, 3, 'apple'); print_r($result); // 输出:Array ( [0] => apple [1] => apple [2] => apple ) ``` 6. array_replace(): 使用后面数组的值替换第一个数组的值。 ```php $array1 = array('a' => 1, 'b' => 2); $array2 = array('b' => 3, 'c' => 4); $result = array_replace($array1, $array2); print_r($result); // 输出:Array ( [a] => 1 [b] => 3 [c] => 4 ) ``` 7. array_map(): 将回调函数作用到给定数组的每个元素上,并返回一个新的数组。 ```php $array = array(1, 2, 3); $result = array_map(function($value) { return $value * 2; }, $array); print_r($result); // 输出:Array ( [0] => 2 [1] => 4 [2] => 6 ) ``` 8. array_walk(): 对数组的每个元素应用用户自定义的函数。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); array_walk($array, function(&$value, $key) { $value = $value * 2; }); print_r($array); // 输出:Array ( [a] => 2 [b] => 4 [c] => 6 ) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值