Benchmarkブームなのでarray_pushについて書いておく
"PHPの素朴な疑問とか - まちゅダイアリー"にて、ループに関するベンチマークの補足をしてもらいました。コンパイル時の最適化、というのは確かにあるのかもなあ...
で、1~10000までの数値を要素とする配列を作る例について、今更感もあるが測定結果。
-------------------------------------------------------------- <?php require_once 'Benchmark/Timer.php'; $timer =& new Benchmark_Timer(TRUE); $array_1 = array(); for ($i = 0; $i < 10000; $i++) { $array_1[$i] = $i; } $timer->setMarker('$array[$i] = $i'); $array_2 = array(); for ($i = 0; $i < 10000; $i++) { $array_2[] = $i; } $timer->setMarker('$array[] = $i'); $array_3 = array(); for ($i = 0; $i < 10000; $i++) { array_push($array_3, $i); } $timer->setMarker('array_push'); $timer->display();
結果。
-------------------------------------------------------------- marker time index ex time perct -------------------------------------------------------------- Start 1197809574.18282500 - 0.00% -------------------------------------------------------------- $array[$i] = $i 1197809574.18789900 0.0050740242004395 30.05% -------------------------------------------------------------- $array[] = $i 1197809574.19268900 0.0047898292541504 28.37% -------------------------------------------------------------- array_push 1197809574.19965300 0.0069639682769775 41.25% -------------------------------------------------------------- Stop 1197809574.19970800 5.5074691772461E-5 0.33% -------------------------------------------------------------- total - 0.01688289642334100.00% --------------------------------------------------------------
しかしこれ何度かやってみると$array[$i] = $iと$array[] = $i;は順位が異なるようだ(PHP 5.2.4 (cli))
とにかくarray_pushを使うと遅い。PHPには異常というほどの配列関数があり、それはそれで便利なのだけど、使った方が便利だとかわかりやすいだとかいう場合を除いてはいまいちおすすめできないかなあと思います。