php 配列の全ての値を表示する場合「foreach」と「for」でパフォーマンスの計測する

phpで、配列の全ての値を表示する場合「foreach」と「for」でパフォーマンスの計測するサンプルコードを記述してます。phpのバージョンは8.0です。
環境
- OS CentOS Linux release 8.0.1905 (Core)
- php 8.0.0
- nginx 1.14.1
実行時間計測
microtimeを使用すれば、処理にかかった時間を計測することが可能です。
1 2 3 4 5 |
$startTime = microtime(true); // 処理を記述 $time = microtime(true) - $startTime; // 処理にかかった時間(ミリ秒) |
以下は、配列の全ての値を表示する場合に、「foreach」と「for」を使用した場合のパフォーマンスの計測するサンプルコードとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php // 10万回実行 define('COUNT', 100000); $arr = ["aaa", "bbb", "ccc"]; // 計測開始 $startTime = microtime(true); for ($i = 0; $i < COUNT; ++$i) { foreach ($arr as $value) {} } result($startTime,'foreach'); // 計測開始 $startTime = microtime(true); for ($i = 0; $i < COUNT; ++$i) { for ($j = 0; $j < count($arr); ++$j) {} } result($startTime,'for'); function result($time,$str){ echo '測定結果 : ' . $str . PHP_EOL; // 表示は少数第5桁まで echo "process time: " . number_format((microtime(true) - $time),5) . ' ミリ秒' . PHP_EOL; echo PHP_EOL; } |
測定結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[1回目] 測定結果 : foreach process time: 0.00889 ミリ秒 測定結果 : for process time: 0.01932 ミリ秒 [2回目] 測定結果 : foreach process time: 0.00827 ミリ秒 測定結果 : for process time: 0.01932 ミリ秒 [3回目] 測定結果 : foreach process time: 0.00823 ミリ秒 測定結果 : for process time: 0.01855 ミリ秒 |
foreachの方がcountを使用しないので、パフォーマンスはいいです。
また、array_filterやarray_mapを使用した場合は、さらにパフォーマンスは悪くなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php // 10万回実行 define('COUNT', 100000); $arr = ["aaa", "bbb", "ccc"]; // 計測開始 $startTime = microtime(true); for ($i = 0; $i < COUNT; ++$i) { array_filter($arr, fn($x) => $x); } result($startTime,'foreach'); // 計測開始 $startTime = microtime(true); for ($i = 0; $i < COUNT; ++$i) { array_map(fn($x) => $x, $arr); } result($startTime,'for'); function result($time,$str){ echo '測定結果 : ' . $str . PHP_EOL; // 表示は少数第5桁まで echo "process time: " . number_format((microtime(true) - $time),5) . ' ミリ秒' . PHP_EOL; echo PHP_EOL; } |
測定結果
1 2 3 4 5 |
測定結果 : array_filter process time: 0.21176 ミリ秒 測定結果 : array_map process time: 0.21040 ミリ秒 |
-
前の記事
javascript oncopyでコピーイベントを取得する 2021.01.03
-
次の記事
React.js ライブラリ「rc-scrollbar」を使ってスクロールバーを実装する 2021.01.04
コメントを書く