配列のサイズを決めるのにcount関数を使うタイミングは?
【Tips】forループの前にcount関数を呼ぶ!
【Description】forループの終了判定にcount関数を入れてしまうと、ループの度にcount関数を実行してしまいます。動的にサイズの変わる配列は仕方がないですが、そうでない場合はforループの前にサイズを変数に格納しておきましょう。また、count関数に限らず終了判定では演算(例:$i < $cnt + 1)を含まないようにしましょう。
<?php
define("WORK_TIME", 1000);
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$hoge = range(0, 100);
//countする場合
$start_time = getmicrotime();
for($i = 0; $i < WORK_TIME; $i++){
for($j = 0; $j < count($hoge); $j++){
$dummy = $hoge[$j];
}
}
$count_time = sprintf("%.4f", getmicrotime() - $start_time);
//countしない場合
$start_time = getmicrotime();
$cnt = count($hoge);
for($i = 0; $i < WORK_TIME; $i++){
for($j = 0; $j < $cnt; $j++){
$dummy = $hoge[$j];
}
}
$no_count_time = sprintf("%.4f", getmicrotime() - $start_time);
?>
<html>
<head><title>count関数の比較</title></head>
<body>
countした場合の結果:<?php echo($count_time);?>秒<br>
countしない場合の結果:<?php echo($no_count_time);?>秒<br>
</body>
</html>