LoginSignup
10

More than 5 years have passed since last update.

PHPのarray_pushとin_arrayの速度について

Last updated at Posted at 2017-04-17

はじめに

in_arrayを使うより、連想配列にしてissetとかで判定した方が早いよという会話を聞いたので、実際に速度を計測してどの程度の差があるのかを確認しました。
せっかくなので配列に値を入れる時にarray_pushを使って、こちらの計測も行います。

array_pushと[] = の比較

まずはin_arrayで計測をするようの配列を準備したいので、配列に値を入れていきます。
その際にせっかくなので、array_pushで値を追加する場合と$array[] = 'hoge' みたいな形で追加する場合のパフォーマンスについて計測してみます。

$array = [];

$start = microtime(true) * 1000;
for ($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
$end = microtime(true) * 1000;

echo $end - $start; // 10.2802734375


$array2 = [];

$start = microtime(true) * 1000;
for ($i = 0; $i < 10000; $i++) {
    $array2[] = $i;
}
$end = microtime(true) * 1000;

echo $end - $start; // 3.06103515625

結果のまとめ

何度かやると上振れ下振れしますが、それぞれの差はあまり変わりませんでした。
だいたい3倍から4倍と行った印象です。

処理 実行速度
array_push 10.2802734375
[] = 3.06103515625

in_arrayとissetの比較

配列の準備ができたので、そこから値を検索するパフォーマンスの計測を行ってみます。

// in_array
$start = microtime(true) * 1000;
in_array(5000, $array);
$end = microtime(true) * 1000;

echo $end - $start; // 0.123046875

// isset
$start = microtime(true) * 1000;
isset($array[5000]);
$end = microtime(true) * 1000;

echo $end - $start; // 0.0048828125

追加で似たような処理を行う組み込み関数も計測してみます。

// array_search
$start = microtime(true) * 1000;
array_search(5000, $array);
$end = microtime(true) * 1000;

echo $end - $start; // 0.089111328125

// array_key_exists
$start = microtime(true) * 1000;
array_key_exists(5000, $array2);
$end = microtime(true) * 1000;

echo $end - $start; // 0.005859375

結果のまとめ

処理 実行速度
in_array 0.123046875
array_search 0.089111328125
isset 0.0048828125
array_key_exists 0.005859375

単純に今回の比較ですとこのような差が出ました。(25倍くらい?)
そのためデータの件数が多い場合には、連想配列にしてissetでの判定ができないか試してみるは良さそうです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10