読者です 読者をやめる 読者になる 読者になる

array_push vs $array[] on PHP 5.1.2

PHP

続、array_pushって遅いんですねより。

こちらでも試してみました。

<?php
require_once 'Benchmark/Timer.php';

$t = new Benchmark_Timer;
$max = 100000;

$array = array();
$t->start();
for ($i = 0; $i < $max; ++$i) {
    array_push($array, $i);
}
$t->setMarker('array_push finished');

$array = array();
$t->setMarker('array[] start');
for ($i = 0; $i < $max; ++$i) {
    $array[] = $i;
}
$t->stop();
$t->display();
?>

これを

% php -v
PHP 5.1.2 (cli) (built: Jan 15 2006 15:57:42)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

な環境で実行すると

% php array_push.php
------------------------------------------------------------------
marker                time index            ex time         perct
------------------------------------------------------------------
Start                 1140543200.70754000   -                0.00%
------------------------------------------------------------------
array_push finished   1140543200.80896000   0.101420        56.68%
------------------------------------------------------------------
array[] start         1140543200.82226300   0.013303         7.44%
------------------------------------------------------------------
Stop                  1140543200.88646000   0.064197        35.88%
------------------------------------------------------------------
total                 -                     0.178920       100.00%
------------------------------------------------------------------

となりました。

56.68 / 35.88 = 約1.58

なので、やはりarray_pushの方が1.5倍くらい遅いですね。
この結果は感覚的には意外ではないです。自分ではarray_pushはほとんど使わないしなぁ。