イテレーションのベンチマーク
ランダム順の整数添え字配列のイテレーションのベンチマークをとってみる。
function mtime_diff($a, $b) { list($a_dec, $a_sec) = explode(' ', $a); list($b_dec, $b_sec) = explode(' ', $b); return $b_sec - $a_sec + $b_dec - $a_dec; } function sq($a) { return $a*$a; } function sq2(&$i, $k) { $i *= $i; } $arr = array(); $numbers = range (1, 10000); shuffle ($numbers); foreach ($numbers as $num) { $arr[$num] = $num; } unset($numbers); $c = $arr; $st = microtime(); foreach ($c as $k => $v) { $c[$k] = $v*$v; } echo sprintf("%0.5f <br>", mtime_diff($st, microtime())); $e = $arr; $st = microtime(); foreach (array_keys($e) as $k) { $e[$k] = $e[$k]*$e[$k]; } echo sprintf("%0.5f <br>", mtime_diff($st, microtime())); $f = $arr; $st = microtime(); $f = array_map('sq', $f); echo sprintf("%0.5f <br>", mtime_diff($st, microtime())); $g = $arr; $st = microtime(); array_walk($g, 'sq2'); echo sprintf("%0.5f <br>", mtime_diff($st, microtime()));
結果。
0.03259 0.04008 0.02431 0.02606
単純なイテレーションだとarray_mapが普通のforeachより25%ほど速い。まー、それほど拘る速度差でもないか。