SOFTELメモ

Softel Inc.

【php】array_merge()が遅い

問題

array_merge(配列, 配列) を繰り返すとどうも遅いのですが。

php

答え

遅いですね。

素直に [] で配列に追加していくほうが高速でした。

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()を繰り返すのは避けたほうがよさそうです。

関連するメモ

コメント