先贴代码
while($i < 1000){
$a = mt_rand(100,999);
$reward[] = ['id'=>$a, 'num'=>$a];
$i++;
}
$sort = new SortClass();
$sort->consumeTime('启动计数');
$items = [];
foreach($reward as $v){
$items[$v['id']] = [$v['id'],$v['num']];
}
$sort->consumeTime('foreach');
$items = [];
$items = array_map(function($v){
return [$v['id'] => [$v['id'],$v['num']]];
},$reward);
$sort->consumeTime('array_map');
$items = [];
while($i < sizeof($reward)){
$items[$reward[$i]['id']] = [$reward[$i]['id'],$reward[$i]['num']];
$i++;
}
$sort->consumeTime('while');
$items = [];
for($i = 0; $i < sizeof($reward); $i++){
$items[$reward[$i]['id']] = [$reward[$i]['id'],$reward[$i]['num']];
}
$sort->consumeTime('for');
$items = [];
$items = array_column($reward, null, 'id');
$sort->consumeTime('array_column');
再贴结果 遍历1000个元素时
10000个
10万个
测试环境 php7.2.5 nginx win10
可以看出array_column效率最快,while次之,再然后foreach array_map最差。
但是可能常规遍历基本不会超过几千次,几万或更大的话其实也不太适合php来执行。所以便利性来说个人觉得还是foreach比较方便,array_map的话非业务逻辑必要还是少用比较好。
em.... 另外,单位是秒
文章来源: www.oschina.net,作者:曲文,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/u/3538113/blog/3107646