array_searchとin_arrayの比較2
array_keysはとても遅い。でもこれって配列の最後まで検索しているからかな。
果たしてどうなのか。
結果
- Linux (SuSE), Celeron 2.66GHz, 1GB, PHP 5.2.0
- [ 0.0088 sec ] [array_search]
- [ 3.1077 sec ] [array_search2]
- [ 6.2292sec ] [array_search3]
- [ 0.0092 sec ] [in_array]
- [ 3.1003 sec ] [in_array2]
- [ 6.2772 sec ] [in_array3]
- [ 7.6481 sec ] [array_keys]
- [ 7.5052 sec ] [array_keys2]
- [ 7.3966 sec ] [array_keys3]
- array_searchとin_array最後まで検索してもarray_keysの方がだいぶ遅い(マッチした結果を保持している分?)。
- やっぱりarray_searchとin_arrayは変わらない。
array_flipとarray_key_existsをつかったらどうなるのかな。
ソース
define('NUM', 10000); define('BR', "\n"); for($i=0;$i<NUM;$i++){ $array[$i] = $i; } $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_search(1, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [array_search]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_search($i, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [array_search2]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_search(NUM, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time);echo '[ '.$end_time.' sec ] [array_search3]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ in_array(1, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [in_array]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ in_array($i, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [in_array2]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ in_array(NUM, $array); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [in_array3]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_keys($array, 1); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [array_keys]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_keys($array, $i); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [array_keys2]'.BR; $time=microtime_float(); for($i=0;$i<NUM;$i++){ array_keys($array, NUM); } $end_time=sprintf("%01.04f", microtime_float()-$time); echo '[ '.$end_time.' sec ] [array_keys3]'.BR; function microtime_float() { if(PHP_VERSION >= 5){ return microtime(true); } else{ return array_sum(explode(' ',microtime())); } }