PHP、array_map と for文の実行速度は for文の方が速い。しかしもっと速いのは・・・。

みんな知っていることかもしれないけれど・・・。
array_map 関数って便利だなー、是非活用しよう!と思ったんですがもしかしたら速度に問題ないだろうか?と思って調べてみました。
ネットで調べたところでは、
http://www.stackasterisk.jp/tech/php/searchAction.do?cid=27
というのがあって array_map 関数のほうが速いと書いてありました。
でも簡単に作った比較のスクリプトでは array_map の方が遅くて、for文よりも foreach文の方がはやかったのです。
どうやら、

for($i=0; $i<count($array); $i++ ) {

ここの配列の数を毎回取得しているのが原因なのと $i++ より ++$i の方がはやいらしい。なぜかは今は知りませんw
これを直してテストをしました。
また繰り返しも加えたのと foreach を加えたのと、おまけもあります。
簡単に作ったスクリプトは以下の通り。

<?php
function a($a) {
    return $a . "\n";
}

$loop = 50;

$array = array_pad(array(), 32000, "a");
$array_count = count($array);

/*
 * array_map の計測
 */
$s = 0;
$s = microtime(true);
for ($l = 0; $l < $loop; ++$l) {
    $array2 = array_map("a", $array);
    unset($array2);
}
$u_map = microtime(true) - $s;

/*
 * for文 の計測
 */
$s = 0;
$s = microtime(true);
for ($l = 0; $l < $loop; ++$l) {
    for($i = 0; $i < $array_count; ++$i) {
        $array2[] = a($array[$i]);
    }
    unset($array2);
}
$u_for = microtime(true) - $s;

/*
 * foreach文 の計測
 */
$s = 0;
$s = microtime(true);
for ($l = 0; $l < $loop; ++$l) {
    foreach($array as $k => $d) {
      $array2[] = a($d);
    }
    unset($array2);
}
$u_foreach = microtime(true) - $s;


/*
 * foreach文 の計測
 * 配列の参照を加えた。
 */
$s = 0;
$s = microtime(true);
for ($l = 0; $l < $loop; ++$l) {
    foreach($array as $k => $d) {
      $array2[] = a($array[$k]);
    }
    unset($array2);
}
$u_foreach2 = microtime(true) - $s;


echo "array_map:    $u_map\n";
echo "for:          $u_for\n";
echo "foreach:      $u_foreach\n";
echo "foreach2:     $u_foreach2\n";

結果は、

array_map:    4.18736886978
for:          4.02036190033
foreach:      4.01496505737
foreach2:     4.30645799637

という感じです。