Skip to content

Instantly share code, notes, and snippets.

@xxxkurosukexxx
Last active December 5, 2017 16:34
Show Gist options
  • Save xxxkurosukexxx/44a5ec182da9c6a39e3c to your computer and use it in GitHub Desktop.
Save xxxkurosukexxx/44a5ec182da9c6a39e3c to your computer and use it in GitHub Desktop.
[PHP] array_unshift()とarray_reverse()はどっちが速いか?
<?php
/**
* array_unshift()とarray_reverse()はどっちが速いか?
* ま、やらなくてもわかってるんだけどさ。
*/
$LOOPCOUNT = 100000;
echo "----- array_unshift() -----" . PHP_EOL;
$s1 = microtime(true);
$a1 = array();
for($i = 0; $i < $LOOPCOUNT; $i++) {
array_unshift($a1, array(
'id' => $i,
));
}
$e1 = microtime(true);
echo "time:" . ($e1-$s1) . PHP_EOL;
echo "a1[0] = " . $a1[0]['id'] . PHP_EOL;
echo PHP_EOL;
echo "----- array_reverse() -----" . PHP_EOL;
$s2 = microtime(true);
$a2 = array();
for($j = 0; $j < $LOOPCOUNT; $j++) {
$a2[] = array(
'id' => $j,
);
}
$a2r = array_reverse($a2);
$e2 = microtime(true);
echo "time:" . ($e2-$s2) . PHP_EOL;
echo "a2r[0] = " . $a2r[0]['id'] . PHP_EOL;

とあるVMでの計測結果

計測

info

$ uname -a
Linux hogehoge 2.6.32-431.20.5.el6.x86_64 #1 SMP Fri Jul 25 08:34:44 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/centos-release
CentOS release 6.6 (Final)
$ php --version
PHP 5.6.2 (cli) (built: Oct 16 2014 09:08:04)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

1回目

$php /tmp/array.php
----- array_unshift() -----
time:286.2655980587
a1[0] = 99999

----- array_reverse() -----
time:0.29395484924316
a2[0] = 99999

2回目

$ php /tmp/array.php
----- array_unshift() -----
time:297.66237282753
a1[0] = 99999

----- array_reverse() -----
time:0.061238050460815
a2r[0] = 99999

3回目

$ php /tmp/array.php
----- array_unshift() -----
time:286.67047691345
a1[0] = 99999

----- array_reverse() -----
time:0.079139947891235
a2r[0] = 99999

結果

やらなくてもなんとなくわかってったけど、$array[]で後に追加していって最後にarray_reverse()したほうが断然速い。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment