先贴代码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