先贴代码
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.... 另外,单位是秒