未分類

【PHP】 switch case文とif文の速度を比較する

投稿日:

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

さらに、遅くなりました....。

 

-未分類

Copyright© エンジニアの階段 , 2019 All Rights Reserved Powered by STINGER.