【php】array_merge()が遅い
問題
array_merge(配列, 配列) を繰り返すとどうも遅いのですが。
答え
遅いですね。
素直に [] で配列に追加していくほうが高速でした。
test1.php
<?php $a = array(); for ($i = 0; $i < 10000; ++$i) { $b = array(1, 2, 3); $a = array_merge($a, $b); }
test2.php
<?php $a = array(); for ($i = 0; $i < 10000; ++$i) { $b = array(1, 2, 3); foreach ($b as $_b) { $a[] = $_b; } }
php5で実行
$ time php /tmp/test1.php real 0m16.870s user 0m16.578s sys 0m0.141s $ time php /tmp/test2.php real 0m0.133s user 0m0.016s sys 0m0.094s
php7で実行
$ time /usr/bin/php7.2 /tmp/test1.php real 0m0.920s user 0m0.922s sys 0m0.016s $ time /usr/bin/php7.2 /tmp/test2.php real 0m0.048s user 0m0.016s sys 0m0.031s
php7ではだいぶましですが、それでも10000回ループした程度で1秒近くかかってしまうので、大きな配列のarray_merge()を繰り返すのは避けたほうがよさそうです。
コメント