いまさらながら php の array_merge が8466倍遅い件について

大量データのレポート出力処理を書いていたら、
線形じゃない形で出力時間が増えていくことになって、何かおかしいなって調査した結果です。

結果、 php の array_merge は使うんじゃない。

Centos7
php7.0.19
でこんな感じのソースで試す
※1から30000まで 5000刻みで配列追加を行う

結果

// use array_merge
5001 >> 0.40064096450806 s
10001 >> 2.418830871582 s
15001 >> 5.3260531425476 s
20001 >> 8.5192930698395 s
25001 >> 14.773620128632 s

// insert with []
5001 >> 0.00035500526428223 s
10001 >> 0.00072813034057617 s
15001 >> 0.0010349750518799 s
20001 >> 0.0013651847839355 s
25001 >> 0.0017449855804443 s

array_merge だと25000行追加するのに14秒
$arr[] = ”; の形だと 0.001秒

14.773620128632/0.0017449855804443 = 8466倍!
使い方が間違っているんだろうか。


追記

akiyanさんにコメントで教えていただきました。

用途が違うってことですね。
php10年近く触っているのにまだまだ知らないことが多い・・・

Leave a Reply