switch case文とif文。
同じ処理を違う書き方で、書くことができるため、どちらを使用するか迷うことがあると思います。
そんな時は、こちらの記事を参考にしてください。
比較方法
一回の処理で6回の比較を行い、どれにも当てはまらなかった場合の処理を実行させます。
この処理を100万回実行し、1処理辺りの平均処理時間を算出します。
if文で処理する
<?php
$count = 1000000;
for($i = 0; $i < $count; $i++){
$time_start = microtime(true);
$str = 'G';
if ($str == 'A'){
echo 'A';
}elseif ($str == 'B'){
echo 'B';
}elseif ($str == 'C'){
echo 'C';
}elseif ($str == 'D'){
echo 'D';
}elseif ($str == 'E'){
echo 'E';
}elseif ($str == 'F'){
echo 'F';
}else {
echo 'G';
}
$results[] = microtime(true) - $time_start;
}
echo '<br>';
echo (array_sum($results) / $count);
実行時間は、
2.3096585273743E-7 秒
= 0.0023096585273743 ms
<?php
$count = 1000000;
for($i = 0; $i < $count; $i++){
$time_start = microtime(true);
$str = 'G';
switch ($str){
case 'A':
echo 'A';
break;
case 'B':
echo 'B';
break;
case 'C':
echo 'C';
break;
case 'D':
echo 'D';
break;
case 'E':
echo 'E';
break;
case 'F':
echo 'F';
break;
default:
echo 'G';
}
$results[] = microtime(true) - $time_start;
}
echo '<br>';
echo (array_sum($results) / $count);
こちらのコードは、縦に長く読みにくいですね....。
実行時間は、
1.5457773208618E-7 秒
= 0.0015457773208618 ms
結論
switch case文の方が縦に長く、読みにくいですが、
処理速度は、速いようです。
おまけ
if文がかなり冗長的なコードでの検証だったため、比較対象を配列にまとめ、実行した場合の速度も取得してみます。
<?php
$count = 1000000;
for($i = 0; $i < $count; $i++){
$time_start = microtime(true);
$str = 'G';
$list = ['A','B','C','D','E','F'];
$flg = false;
foreach ($list as $value){
if ($str == $value){
echo $value;
$flg = true;
break;
}
}
$flg ?: print 'G';
$results[] = microtime(true) - $time_start;
}
echo '<br>';
echo (array_sum($results) / $count);
3.8052773475647E-7 秒
= 0.003805277347564 ms
さらに、遅くなりました....。