【PHP】配列の初期化のベンチマーク

PHPの配列を初期化する場合には、

$array = array() ;

とします。

配列に値を入れて初期化する場合には、

$array = array(1, 2, 3, 4, 5)  ;

とします。

それでは、要素を10個もつ配列のすべての要素を、NULLで初期化するにはどうしたら良いでしょうか?

//1の方法
$array = array(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL ) ;

たしかに、これでも、初期化できてますが、スマートではありません。

それでは、ループさせてみては?

//2の方法
for ($i = 0; $i < 10; $i++)  {       
  $array[] = NULL ;
}

たしかに、これでも初期化できます。しかし、ループにすると速度落ちない?という疑問もでてきます。

そこで、関数を調べてみると、array_fill なる関数が使えそうです。

//3の方法
$array = array_fill(0, 10, NULL);

これは、配列のインデックス0から10個をNULLで初期化するというものです。
つまり、インデックス0から9までNULL値の配列ができるのです。

ここまでで、3つの方法を挙げてみましたが、果たして、どれが一番よいのでしょうか?

確認するためにベンチマークを取ってみました。

配列初期化ベンチマーク

配列初期化ベンチマーク

1の方法と3の方法は、ほとんど速度が変わりませんでした。しかし、ループさせる2の方法は、倍以上も遅くなってます。

1の方法は、NULLの羅列が目障りなので、やはり、3の array_fill 関数を利用するのが良いという結論に達します。

一応、確認のため、別の方法でもベンチマークをとってみました。

すると、結果はやはり同一になりました。

array()を算出

  • 平均値: 0.000090 [sec]
  • 全測定結果:
    Array
    (
        [1] => 0.000098
        [2] => 0.000088
        [3] => 0.000092
        [4] => 0.000089
        [5] => 0.000087
        [6] => 0.000090
        [7] => 0.000090
        [8] => 0.000089
        [9] => 0.000090
        [10] => 0.000092
        [mean] => 0.000090
        [iterations] => 10
    )

array_fillを算出

  • 平均値: 0.000099 [sec]
  • 全測定結果:
    Array
    (
        [1] => 0.000104
        [2] => 0.000099
        [3] => 0.000099
        [4] => 0.000099
        [5] => 0.000099
        [6] => 0.000098
        [7] => 0.000099
        [8] => 0.000100
        [9] => 0.000098
        [10] => 0.000100
        [mean] => 0.000099
        [iterations] => 10
    )

for loopを算出

  • 平均値: 0.000227 [sec]
  • 全測定結果:
    Array
    (
        [1] => 0.000230
        [2] => 0.000229
        [3] => 0.000228
        [4] => 0.000227
        [5] => 0.000229
        [6] => 0.000227
        [7] => 0.000227
        [8] => 0.000226
        [9] => 0.000228
        [10] => 0.000228
        [mean] => 0.000227
        [iterations] => 10
    )

以上、覚書です。

カテゴリー: PHP パーマリンク

コメントを残す

メールアドレスが公開されることはありません。