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 )
以上、覚書です。