以前のバージョンに関するこの質問を扱った記事( here 、 here )は、通常のループの方がパフォーマンスの点で有益であると述べています。
そして、 ここでは、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 |
数字が相対的であることは明らかです。 しかし、いくつかの結論、親愛なる同僚は、私たちが描くことを可能にします。