[PHP-users 16203]Re: case文での比較演算子について

Masayuki AOKI info @ martin.bz
2003年 6月 24日 (火) 20:55:12 JST


martinです。

濱井 wrote:
|確かに大差ないと思います。性能もほぼ同じでしょう。

興味深くこの一連のスレッドを眺めていましたが,少し気になったので,同じ結
果を返すと思われる以下の3式について,マニュアルにも書いてある式でミリ秒
単位の時間計測をしてみました。

(式1):
 $i = 50;
 if ($i<=20){
  $size = 1;
 }elseif($i<=100){
  $size = 5;
 }else{
  $size = 10;
 }

(式2): // 実用性はともかくこの手の発想は好きです。
$i = 50;
 switch(true){
  case ($i<=20):
   $size = 1;
   break;
  case ($i<=100):
   $size = 5;
   break;
  default:
   $size = 10;
}

(式3): // 個人的はこれを使うかな。
 $i = 50;
 $size = ($i<=20) ? 1 : (($i<=100) ? 5 : 10);

これを以下のタイムウォッチで計測
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$sec + (float)$usec); 
}

$time_start = getmicrotime();
$n=0;
while($n<1000){
  // ここに上の3式を各々入れて比較
 $n++;
}
$time_end = getmicrotime();
$finish = ($time_end - $time_start);

この比較が妥当かどうか分かりませんが,PHP4.3.1+Apache2.0.45 in WinXP+IE6.0
という環境では,遅い順に(と言っても人間の認知外ですが)

        (式2) < (式3) < (式1)

となりました。予想では(根拠なし) (式2) < (式1) < (式3) だったんですが。



/*
Masayuki AOKI: maoki @ bioreg.kyushu-u.ac.jp
      HomePage: http://martin.bz
*/



PHP-users メーリングリストの案内