数年前「ループのカウント判定としてcount関数使うな」と注意されたことがあり、思い出したので計測してみた。
10文字の変数のカウントを10000ループで処理をした。
結果:全て変数に入れてループした方が早い。
php -version
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
httpd -v
Server built: Feb 20 2016 20:03:19
1回目: 変数格納した方が0.0441207885742早い
変数ループ:0.0257985591888秒
count関数使用したループ:0.0699193477631秒
2回目: 変数格納した方が0.0399599075317早い
変数ループ:0.0249683856964秒
count関数使用したループ:0.0649282932281秒
3回目: 変数格納した方が0.0579628944397早い
変数ループ:0.031925201416秒
count関数使用したループ:0.0898880958557秒
4回目: 変数格納した方が0.0402450561523早い
変数ループ:0.0245311260223秒
count関数使用したループ:0.0647761821747秒
5回目: 変数格納した方が0.0388638973236早い
変数ループ:0.0247168540955秒
count関数使用したループ:0.0635807514191秒
6回目: 変数格納した方が0.037935256958早い
変数ループ:0.0240049362183秒
count関数使用したループ:0.0619401931763秒
7回目: 変数格納した方が0.0404722690582早い
変数ループ:0.0258228778839秒
count関数使用したループ:0.0662951469421秒
8回目: 変数格納した方が0.0397148132324早い
変数ループ:0.0250782966614秒
count関数使用したループ:0.0647931098938秒
9回目: 変数格納した方が0.0373675823212早い
変数ループ:0.0237381458282秒
count関数使用したループ:0.0611057281494秒
10回目: 変数格納した方が0.0383319854736早い
変数ループ:0.0248041152954秒
count関数使用したループ:0.063136100769秒
$array = array('a' ,'b' ,'c' ,'d' ,'e' ,'f' ,'g' ,'h' ,'i' ,'j');
$count = 10000;
for($n = 1; $n < 11; $n++){
$sum_v = 0;
$sum_c = 0;
for($l = 0; $l < $count; $l++){
$time_start_v = microtime(true);
$arrayCount = count($array);
for ($i = 0; $i < $arrayCount; $i++) {
}
$time_v = microtime(true) - $time_start_v;
$sum_v += $time_v;
$time_start_c = microtime(true);
for ($i = 0; $i < count($array); $i++) {
}
$time_c = microtime(true) - $time_start_c;
$sum_c += $time_c;
}
$vc = $sum_v-$sum_c;
echo $n . "回目: ";
echo $sum_v > $sum_c ? "count関数の方が" . abs($sum_v-$sum_c) . "早い<br>" : "変数格納した方が". abs($sum_v-$sum_c) . "早い<br>";
echo "変数ループ:" . $sum_v . "秒<br>";
echo "count関数使用したループ:" . $sum_c . "秒<br><br>";
}