forとforeachの速度比較

forよりforeachのほうが速いといわれているので、本当に速いのかテストしました。

for 毎回countのテストコード
for 最初にcountのテストコード
foreachのテストコード

結果

所要時間メモリ
for 毎回count13.1446秒41976B
for 最初にcount7.1359秒42048B
foreach6.4443秒41952B

速度は倍も違う。 使用メモリはほとんど変わらないようです。 forは、$iの値を増やす →countと比較の動作があるので、遅いようです。

for 毎回countのテストコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$tests=array();
for($k=0;$k<100000;$k++){
  $tests[]="テストのテキストです。";
}

$s=getMicrotime();
$ms=memory_get_usage();

ob_start();
for($y=0;$y<100;$y++){
  for($i=0;$i<count($tests);$i++){
    echo $tests[$i];
    ob_clean();
  }
}

$e=getMicrotime();
$me=memory_get_peak_usage();

echo ($e-$s);
echo "<br />";
echo ($me-$ms);

for 最初にcountのテストコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$tests=array();
for($k=0;$k<100000;$k++){
  $tests[]="テストのテキストです。";
}

$s=getMicrotime();
$ms=memory_get_usage();
$c=count($tests);

ob_start();
for($y=0;$y<100;$y++){
  for($i=0;$i<$c;$i++){
    echo $tests[$i];
    ob_clean();
  }
}

$e=getMicrotime();
$me=memory_get_peak_usage();

echo ($e-$s);
echo "<br />";
echo ($me-$ms);

foreachのテストコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$tests=array();
for($k=0;$k<100000;$k++){
  $tests[]="テストのテキストです。";
}

$s=getMicrotime();
$ms=memory_get_usage();

ob_start();
for($y=0;$y<100;$y++){
  foreach($tests as $test){
    echo $test;
    ob_clean();
  }
}

$e=getMicrotime();
$me=memory_get_peak_usage();

echo ($e-$s);
echo "<br />";
echo ($me-$ms);

関連記事

スポンサーリンク

cut テキスト・ファイルの各行から一部分を取り出す

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る