if と switch
if と switch を戦わせてみた。どっちを使った方が早いんだろう。
ここに載ってたコードをPHPで走らせてみる。↓
(嗚呼、Cで書けよ!という声が沢山聞こえる気がする…。いやね、違うんですよ、最初perlで書いたら、switch文が無いことに気付いてですね…。)
<?php $loop = 1000000; callswitch($loop); print "---------------------\n"; callif($loop); function callswitch($loop) { $bs = time(); $n = 0; for ($i = 0; $i < $loop; $i++) { switch ($n) { case 0: $n = 1; break; case 1: $n = 2; break; case 2: $n = 3; break; case 3: $n = 4; break; case 4: $n = 5; break; case 5: $n = 6; break; case 6: $n = 7; break; case 7: $n = 8; break; case 8: $n = 9; break; case 9: $n = 0; break; default: $n = 0; break; } } $as = time(); print "switch : ".($as - $bs)." \n"; } function callif($loop) { $bf = time(); $n = 0; for ($i = 0; $i < $loop; $i++) { if ($n == 0) { $n = 1; } elseif ($n == 1) { $n = 2; } elseif ($n == 2) { $n = 3; } elseif ($n == 3) { $n = 4; } elseif ($n == 4) { $n = 5; } elseif ($n == 5) { $n = 6; } elseif ($n == 6) { $n = 7; } elseif ($n == 7) { $n = 8; } elseif ($n == 8) { $n = 9; } elseif ($n == 9) { $n = 0; } else { $n = 0; } } $af = time(); print "if : ".($af - $bf)." \n"; } ?>
結果は、$loopの回数が少ないと if の勝ち。$loopの回数が多くなると switch の勝ち。
参考にしたページと同じ結果になった。ふむ。
先日、とある人のコードで、
$count = 0; foreach ($hogearray as $hoge) { switch ($count) { case 0: hoge0; break; case 1: hoge1; break; case 2: hoge2; break; case 3: hoge3; break; case 4: hoge4; break; case 5: hoge5; break; default: defo; break; } $count++; }
というのを見て唖然としたので、調べたくなった次第です。