サンプルコード 実行結果
memory 1:160 memory 2:128 memory 3:0個人的な予想に反してforよりforeachの方が省メモリであるという結果が出ました。
コードの書き方を何か間違えたかな…と思ったのですが原因についてはよく分かりませんでした。
listとeachを使ったループが最も省メモリであるのは予想通りです。
とても大きな配列をループさせる時はlistとeachで回すのも一つの方法かもしれませんね。
memory 1:160 memory 2:128 memory 3:0個人的な予想に反してforよりforeachの方が省メモリであるという結果が出ました。
1 memory 1:56 memory 2:5324488と、このようにtest1とtest2ではメモリの使用量に大きな差が出ています。
time:0.10538291931152 memory:8653392配列のサンプルコード 実行結果
time:0.01983904838562 memory:8647760と、速度もメモリ使用量も配列のほうがパフォーマンスが高いという結果になりました。
string(21) "arr_object::offsetSet"
string(21) "arr_object::offsetSet"
string(21) "arr_object::offsetSet"
string(24) "arr_object::offsetExists"
bool(false)
string(21) "arr_object::offsetGet"
string(6) "array2"
string(23) "arr_object::offsetUnset"
arr_object Object
(
[container:arr_object:private] => Array
(
[0] => array1
[1] => array2
)
)
BenchMark 1 average:0.012288689613342 BenchMark 2 average:0.0055228233337402というわけで、普通の配列の倍以上の時間がかかることが分かりました。
BenchMark 1 average:0.032666206359863 BenchMark 2 average:0.032941651344299これからはパターン1で行こうと思います。
array(1) {
[1]=>
string(1) "d"
}
上の例は、keyが全て1に型キャストされる例です。
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
}
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
}
と、このように関数の結果を一次変数に代入しなくても次の関数の引数に設定することができるようになりました。
Array
(
[0] => a0
[1] => a1
[2] => a2
[a] => ba
[b] => bb
[c] => bc
[3] => b0
[4] => b1
[5] => b2
)
Array
(
[0] => a0
[1] => a1
[2] => a2
[a] => aa
[b] => ab
[c] => ac
)
ということで、表にまとめるとこのような感じになります。| 数値 | 文字列 | |
|---|---|---|
| array_merge | 後の配列は後ろに追加 | 後の配列の値で上書き |
| + | 前の配列の値で上書き | 前の配列の値で上書き |
BenchMark 1 average:0.029446578025818 BenchMark 2 average:0.011990690231323やっぱりarray_mergeを使わない方が速いですね。
BenchMark 1 average:0.0046348333358765 BenchMark 2 average:0.01211142539978 BenchMark 3 average:0.012383699417114変数と比べて配列は3倍くらい遅いですね。
BenchMark 1 average:0.2620055437088 BenchMark 2 average:0.26266303062439 BenchMark 3 average:0.26184134483337こんな感じでした。
array(5) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
}
array(5) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
}
速度調査もしてみますBenchMark 1 average:1.6927280902863 BenchMark 2 average:1.0643670082092速度的にも後者のほうが良いですね。
NULL : array(0) {
}
"" : array(0) {
}
"a" : array(0) {
}
0 : array(0) {
}
1 : array(0) {
}
+1 : array(0) {
}
-1 : array(0) {
}
0x0A : array(0) {
}
012 : array(0) {
}
0.1 : array(0) {
}
1e3 : array(0) {
}
1e-3 : array(0) {
}
array("") : array(0) {
}
array("a") : array(1) {
[0]=>
string(1) "a"
}
array(array("a")) : array(1) {
[0]=>
array(1) {
[0]=>
string(1) "a"
}
}
TRUE : array(0) {
}
FALSE : array(0) {
}
object : array(0) {
}
fopen : array(0) {
}
ちなみに、実際に使用するときは以下のように判別して使用します。