配列のループ処理の速さは??
配列の要素に対して処理を行いたいことはよくある話だが何が一番早いのか検証してみた。
ちなみに配列
$array = array();
for($i = 1; $i < 100000; $i++){
$array[] = $i;
}
処理させる内容
function hundredNumber($n){
return $n * 100;
}
処理速度を測る関数はこちらを参考にさせていただきました。
foreach
定番の配列処理
$start = hrtime(true);
$result_array = array();
foreach($array as $num){
$result_array[] = hundredNumber($num);
}
$end = hrtime(true);
echo 'time : '.number_format($end - $start)."<br>";
//time : 19,387,398
for
ループ処理といえばこれ
$start = hrtime(true);
$result_array = array();
for($i = 1; $i < 100000; $i++){
$result_array[] = hundredNumber($i);
}
$end = hrtime(true);
echo 'time : '.number_format($end - $start);
//time : 17,017,476
while
またまた定番、よく無限ループして焦ってる
$start = hrtime(true);
$result_array = array();
$i = 1;
while($i < 100000){
$result_array[] = hundredNumber($i);
$i++;
}
$end = hrtime(true);
echo 'time : '.number_format($end - $start);
//time : 17,280,002
array_map
あんまり使ったことない
$start = hrtime(true);
$result_array = array_map('hundredNumber', $array);
$end = hrtime(true);
echo 'time : '.number_format($end - $start);
//time : 15,786,888
結果発表
一番定番のforeachが遅い結果となってしまいました。
そして私の中ではダークホース的存在だったarray_mapが優勝!!
コードもスッキリするし、これからは積極的に使っていこうと思いました。