实测php switch和if else的效率性能比较,以及IF语句各种情况下的效率比较

三郎 2023-1-28 212

网络上到处都是关于php switch和if else的各种性能推测,各家都有自己的说法,但是却很少是经过具体测试得出来的。经过各种测试,得出以下结论:

测试代码如下:

$counter=10000000;
$b=5;
echo PHP_EOL.PHP_EOL;
$start = microtime( true );
for( $n = 1; $n <= $counter; $n++ ){
	if($b==1){
		$d='ok1';
	}
	elseif($b==2){
		$d='ok2';
	}
	elseif($b==3){
		$d='ok3';
	}
	elseif($b==4){
		$d='ok4';
	}
	else{
		$d='ok';
	}
}
$end = microtime( true );
$cost_time = $end - $start;
echo "if else : 耗费时间为{$cost_time},".$d."<br />";
echo PHP_EOL.PHP_EOL;
$start = microtime( true );
for( $i = 1; $i <= $counter; $i++ ){
	switch($b){
		case 1:$d='ok1';break;
		case 2:$d='ok2';break;
		case 3:$d='ok3';break;
		case 4:$d='ok4';break;
		default:$d='ok';
	}
}
$end = microtime( true );
$cost_time = $end - $start;
echo "switch : 耗费时间为{$cost_time},".$d."<br />";

一、php switch和if else的各种情况下的性能和效率比较。

1、当用来比较的值是数字字符串(如$b=='1'或case '1')时,不管$b是字符串还是int整数,switch和if else效率基本一样,同时两者的效率都很低。

1.1、当$b是int整数(如:1)时,比字符串数字(如:'1')稍快。

1.2、当$b是非数字开头的字符串(如:'k1')时,比数字开头的字符串(如:'1k')快。

1.3、此种情况下,switch语句排在上面的case比下面的case快,default最慢,可以说和if else没有任何区别。

2、当用来比较的值是int整数(如$b==1或case 1)时,分两种情况:

2.1、当$b是字符串时(如:'1'或'k1'或'kk'),switch和if else效率都和上面的1.1情况一样。

2.2、当$b是int整数(如:1)时,switch和if else效率都很快,比2.1的情况快几倍,需要比较的次数越多,快得越多。此时switch语句最快的是default,其他case基本速度一样(如:1和4速度是一样的),if else在$b<3时,速度比switch快。switch语句的default比if else 的第一个比较稍快。

3、当用来比较的值是非数字字符串(如$b=='kk'或case 'kk')时,不管$b是整数还是字符串,switch和if else效率都很快。switch的效率比情况2.2稍慢,最快的是default,其他case基本速度一样。if else在$b<3时,速度比switch快,但越往后速度越慢,当$>4时,效率比switch低一倍以上,比较的次数越多,差得越多(switch此时不管有多少个case,效率都一样,而if else则随比较次数增加而效率降低,越后面的语句越慢)。


二、php if else和三元语句以及AND、&&等语句的性能和效率比较。

1、经测试,if($a==$b){$c='ok';} else {$c='no';}比三元语句$c=$a==$b ?'ok':'no'; 快差不多一倍。

2、经测试if($a==$b){$c='ok';}比AND语句$a==$b AND $c='ok';快40%左右。

3、经测试

if($a==$b){
    if($a1==$b1){
       $c='ok';
    }
    else{
        $c='no';
    }
}
else{
    $c='no';
}
//比下面的语句快50%,
if($a==$b && $a1==$b1){
    $c='ok';
}
else{
    $c='no';
}

4、经测试PHP if语句在各种情况的效率比较如下:

if(true)>if($a=='ok')>if($a)>if(!$a)=if($a===true)>if($a!==true)>AND语句>三元语句。

最新回复 (2)
  • 0 引用 2
    PHP7.0以后,出了新的语句,$a=$b  ??  'ok';效果等同于if(isset($b)){$a=$b}else{$a='ok';},但效率比后者慢20%左右。
    2023-1-28 回复
  • 0 引用 3

    在大流量应用中,尽量用最原始的代码编写方式,可以有效增加负载率。流量低的时候就无所谓哪种写法了。

    2023-1-28 回复
返回
发新帖