アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

in_array VS array_search 速度検証

タイトル通り。

わたしは普段「ある配列にある値があるかどうか」のチェックにin_arrayを用いていますが、
他の人のソースでarray_searchを用いているのを見かけたので
単純に気になって速度検証。
(in_arrayの方が速いんじゃないかなーという予想)

検証コードは以下のような感じ。
いろいろ省略していますが、「各動作を1万回ずつ繰り返し×5セット」の試験です。

// 26個の要素を持つ配列
$list = array(
    'a' => "abc",
    'b' => "bcd",
    'c' => "cde",
    ...
    'z' => "zab",
);

// ①in_array × 最初の要素がヒット
in_array("abc", $list);

// ②in_array × 最後の要素がヒット
in_array("zab", $list);

// ③in_array × ヒットする要素なし
in_array("hoge", $list);

// ④array_search × 最初の要素がヒット
array_search("abc", $list);

// ⑤array_search × 最後の要素がヒット
array_search("zab", $list);

// ⑥array_search × ヒットする要素なし
array_search("hoge", $list);

結果。
(1万回繰り返すのにかかる時間の平均、単位はミリ秒)

関数 最初の要素がヒット 最後の要素がヒット ヒットする要素なし
in_array 3.091 18.333 18.523
array_search 3.506 18.787 18.464

まあ…誤差ですね。
1万回繰り返して最短3ミリ秒ですからね。
配列のサイズとかヒット率とか順番とかの方がよほど影響は大きいです。