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

先贴代码php

<?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个元素时nginx

10000个php7

10万个测试

测试环境 php7.2.5  nginx  win10code

能够看出array_column效率最快,while次之,再而后foreach  array_map最差。blog

可是可能常规遍历基本不会超过几千次,几万或更大的话其实也不太适合php来执行。因此便利性来讲我的以为仍是foreach比较方便,array_map的话非业务逻辑必要仍是少用比较好。rem

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

相关文章
相关标签/搜索