php 各种遍历方式及效率测试 while foreach for 异同

原创
2019/09/18 17:45
阅读数 518

先贴代码

<?php


include 'SortClass.php';
$i = 0;
$reward = [];

while($i < 100000){
    $a = mt_rand(100,999);
    $reward[] = ['id'=>$a, 'num'=>$a];
    $i++;
}

SortClass::consumeTime('启动计数');


$items = [];
foreach($reward as $v){
    $items[$v['id']] = [$v['id'],$v['num']];
}
SortClass::consumeTime('foreach');

$items = [];
$items = array_map(function($v){
    return [$v['id'] => [$v['id'],$v['num']]];
},$reward);
SortClass::consumeTime('array_map');

$items = [];
while($i < sizeof($reward)){
    $items[$reward[$i]['id']] = [$reward[$i]['id'],$reward[$i]['num']];
    $i++;
}
SortClass::consumeTime('while');

$items = [];
for($i = 0; $i < sizeof($reward); $i++){
    $items[$reward[$i]['id']] = [$reward[$i]['id'],$reward[$i]['num']];
}
SortClass::consumeTime('for');

$items = [];
$items = array_column($reward, null, 'id');
SortClass::consumeTime('array_column');


-------------------
//打印时间方法
public static function consumeTime($remark = ''){
        static $start , $end , $num = null;
        $num++;
        if(!$start){
            $start = microtime(true);
            return true;
        }
        $end = microtime(true);
        var_dump("第 {$num} 次:- {$remark} - :" . bcsub($end,$start,4));
        $start = microtime(true);
    }

再贴结果 遍历1000个元素时

10000个

10万个

测试环境 php7.2.5  nginx  win10

可以看出array_column效率最快,while次之,再然后foreach  array_map最差。

但是可能常规遍历基本不会超过几千次,几万或更大的话其实也不太适合php来执行。所以便利性来说个人觉得还是foreach比较方便,array_map的话非业务逻辑必要还是少用比较好。

em....  另外,单位是秒

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部