php循环数组效率问题

qii 发布于 2017/03/16 17:49
阅读 344
收藏 0

为啥网上都说array_map比foreach快,我测试的结果是foreach最快呢。

php版本

PHP 7.0.1 (cli) (built: Dec 16 2015 13:36:28) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans
$prize_list = [];
// $total = 0;
for($i = 0; $i < 10000; $i ++){
    $prize_list[] = ['probability' => $i];
    $total += $i;
}

$avg = 0;
for($i = 0; $i < 100; $i ++){
    $start = microtime(true);
    array_map(function($item){}, $prize_list);
    $end = microtime(true);
    $avg += ($end - $start);
}
echo "array_map avg: ",$avg/100, "\n";
unset($avg, $i, $start, $end);
$avg2 = 0;
for($i = 0; $i < 100; $i ++){
    $start = microtime(true);
    foreach($prize_list as $item){}
    $end = microtime(true);
    $avg2 += ($end - $start);
}
echo "foreach avg, avg: ",$avg2/100, "\n";
unset($avg, $i, $start, $end);
$avg3 = 0;
for($i = 0; $i < 100; $i ++){
    $start = microtime(true);
    array_walk($prize_list, function($item){});
    $end = microtime(true);
    $avg3 += ($end - $start);
}
echo "array_walk avg: ",$avg3/100, "\n";


代码有毛病?

 

array_map avg: 0.021691238880157
foreach avg, avg: 0.00066004037857056
array_walk avg: 0.023171319961548
[Finished in 4.6s]

 

加载中
0
光谷男
光谷男

网上的评价都是基于PHP5版本的,现在PHP7版本foreach的性能提高了很多,foreach不需要执行回调函数,foreach更快.。网上的一大堆摘抄的人,知识库该更新了。

返回顶部
顶部