array_ * vs foreachまたはPHP7 vs PHP5

良い一日。 どういうわけか、舞台裏では、バージョン7で配列を操作するときに、標準のPHP関数のパフォーマンスが向上するという問題が残っていました。



以前のバージョンに関するこの質問を扱った記事( herehere )は、通常のループの方がパフォーマンスの点で有益であると述べています。



そして、 ここでは、7番目のバージョンのテストを既に見ることができます。 そして、すべてがそれほどユニークなわけではありません。 2015年11月19日のテストでは、ループと組み込み関数のパフォーマンスは同等であり、最後のトピックのみが考えさせられます。



そして、結果についてはどうですか...私は自分ですべてをチェックし、いくつかのテストを実行することにしました...



1)array_filter



ソースコード
$data = range(0, 10000); $start = microtime(true); $data = array_filter($data, function ($item) { return $item%2; }); $end = microtime(true); echo $end - $start.' '; $data = range(0, 10000); $start = microtime(true); $newData = array(); foreach ($data as $item) { if ($item%2) { $newData[] = $item; } } $end = microtime(true); echo $end - $start.' '; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); for($i=1;$i<=$numItems-1;$i++) { if ($data[$i]%2) { $newData[] = $data[$i]; } } $end = microtime(true); echo $end - $start.' '; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); $i = 0; while ($i <= $numItems-1) { if ($data[$i]%2) { $newData[] = $data[$i]; } $i++; } $end = microtime(true); echo $end - $start.' ';
      
      







丸みを帯びた...

機能 PHP5 PHP7
array_filter 0.00282 0.00136
foreach 0.0013 0.00045
のために 0.00171 0.00072
ながら 0.00145 0.00054


2)array_map



ソースコード
 <?php $data = range(0, 10000); $start = microtime(true); $data = array_map(function ($item) { return $item+1; }, $data); $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); foreach ($data as $item) { $newData[] = $item+1; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); for($i=0;$i<$numItems;$i++) { $newData[] = $data[$i]+1; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); $i = 0; while ($i < $numItems) { $newData[] = $data[$i]; $i++; } $end = microtime(true); echo $end - $start;
      
      







機能 PHP5 PHP7
array_map 0.00462 0.00094
foreach 0.00155 0.00033
のために 0.00220 0.00044
ながら 0.00169 0.00054


3)array_walk



ソースコード
 $data = range(0, 10000); $start = microtime(true); $data = array_walk($data, function ($item) { return $item+1; }); $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); foreach ($data as $item) { $newData[] = $item+1; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); for($i=0;$i<$numItems;$i++) { $newData[] = $data[$i]+1; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = array(); $numItems = count($data); $i = 0; while ($i < $numItems) { $newData[] = $data[$i]; $i++; } $end = microtime(true); echo $end - $start;
      
      







機能 PHP5 PHP7
array_walk 0.00285 0.00101
foreach 0.00290 0.00088
のために 0.00219 0.00043
ながら 0.00173 0.00086


4)array_reduce



ソースコード
 $data = range(0, 10000); $start = microtime(true); $data = array_reduce($data, function ($carry, $item) { $carry += $item; return $carry; },0); $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = 0; foreach ($data as $item) { $newData+= $item; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = 0; $numItems = count($data); for($i=0;$i<$numItems;$i++) { $newData+= $data[$i]; } $end = microtime(true); echo $end - $start; $data = range(0, 10000); $start = microtime(true); $newData = 0; $numItems = count($data); $i = 0; while ($i < $numItems) { $newData+= $data[$i]; $i++; } $end = microtime(true); echo $end - $start;
      
      







機能 PHP5 PHP7
array_reduce 0.00239 0.00092
foreach 0.00044 0.00020
のために 0.00066 0.00029
ながら 0.00062 0.00029


数字が相対的であることは明らかです。 しかし、いくつかの結論、親愛なる同僚は、私たちが描くことを可能にします。



All Articles