遇到的一个面试题目,求解 问题什么时候用if else什么手用switch这两个小爱什么情况下用的时候那个效率高谁能给出为什么效率高的解释 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //if else 判断(真\假)。当有复杂的表达式时可以使用//switch 选择.有多项选择时可以使用。//switch语句:$num=91;switch(true){case $num>60: echo "及格<br/>";case $num>80: echo "良<br/>";case $num>90: echo "优<br/>";}//输出的结果是://及格//良//优//也就是全部执行输出。//if语句:$num=91;if($num>60){ echo "及格<br/>";}else if(num>80){ echo "良<br/>";}else{ echo "优<br/>";}//输出的结果是://及格//只执行一次//可以看出if语句效率比较高。 这两个都是对条件进行判断,区别主要在于效率:对同一变量的不同值作提交判断时,switch效率高于if实用性:if是实用最强和应用范围最广的语句能两者都用的的地方,一般都用switch而不用if else。因为效率差别不是一点! 分支较少,一般选择 if else或者是三目运算:?,较多情况通常选择switch假设每种情况几率相等,if else为了命中条件,选择的平均复杂度为O(n/2),而switch为O(1);在条件较多情况下,switch的优势会体现出来前面#1贴的switch语句是有问题的 1楼举的例子恰恰相反,你为什么指定$num=91!在判断的时候,$num一般是作为未知的,不是像这样要执行几次就看出效率的 对同一值或语句的较多情况判断用switch其他情况用if else switch 只能判断 int char 同意3楼,看选择的情况而定。没有说一定哪个比较好用。switch估计系统调用的资源比if多,但选择多的时候就是switch比较好。 1楼,你这个例子有点那个啊!你直接说ifelse是符合条件就结束。switch是执行到break才结束就行了嘛!这跟效率有啥关系? 其实都一样if(xxx){ if(xxx) else{xxxxxx} }elseif(){ xxxx}switch(){ case xxx: echo 'xxx'; breack; case yyy: echo 'yyy'; breack;}个人感觉应该根据需求而定 效率没有高低之分 很多时候if更强大 可以处理更复杂的东东 $num=91;switch(true){case $num>60: echo "及格<br/>"; break;case $num>80: echo "良<br/>"; break;case $num>90: echo "优<br/>"; break;}这样结果是不是不同了呢?呵呵 if拥有强大的嵌套功能 switch能做到吗? 为什么不能?!!!switch也可以 嗯?switch我还没用过嵌套 给个例子 这个怎么嵌套? 刚才百度一下 写出了本人第一个嵌套switch语句 $a=5;$b=10;switch($a){ case $a<10: switch($b) { case $a<$b: echo "\$a小于\$b"; break; }; break; default:echo "\$a大于\$b"; }虽然能嵌套 但感觉不如if好用 纯粹误导 我用起来没感到有差别 switch在有些时候代码看起来更整洁一些 读起来一目了然 有些时候没有if好用 比如我判断静态文件x不存在 就重新连接数据库进行动态生成静态 这时候你用switch试试 就知道哪个更好用了 所以二者的区别不是效率的差别 而是使用条件的差别 这是哪家公司面试的这样的面试题也出的出来~~~我宁愿出这样的问题if() { for()}for() { if()}的效率问题 我觉的吧,switch使用于对判断有点规律的,而if else判断的是没什么规律的!这样他们的效率才能体现出来! switch语句应该是int,byte,char吧 这个可是xx著名网络公司问我的面试题啊哎!!囧 我可能不会选择这家公司了其实是要看看zend framework的代码的现在我的理解是switch的效率高些我没看源代码,但是ifelse 可能得做多次判断switch的case条件是可以做hash的哎似乎就3楼说道重点囧 对于你的问题,我做了如下测试40条测试数据:测试1000 0000次时间如下单位(s)if:10.42346000671410.44054579734810.49663996696510.3865089416510.34659504890410.430146932602平均值:10.420649449031switch:11.25897312164311.02948904037510.98830699920711.09563517570511.12361383438110.950119018555平均值:11.0743561983111有事要忙了,没时间测试更多的了:switch 和 if 执行速度上并没有太大区别,甚至if比switch速度还要快点,使用视具体情况而定吧代码如下$time = explode(' ', microtime());$time1 = $time[1] + $time[0];for($i = 0; $i < 10000000; $i++){ $flag = rand(1, 40); if($flag == 1){} else if($flag == 2){} else if($flag == 3){} else if($flag == 4){} else if($flag == 5){} else if($flag == 6){} else if($flag == 7){} else if($flag == 8){} else if($flag == 9){} else if($flag == 10){} else if($flag == 11){} else if($flag == 12){} else if($flag == 13){} else if($flag == 14){} else if($flag == 15){} else if($flag == 16){} else if($flag == 17){} else if($flag == 18){} else if($flag == 19){} else if($flag == 20){} else if($flag == 21){} else if($flag == 22){} else if($flag == 23){} else if($flag == 24){} else if($flag == 25){} else if($flag == 26){} else if($flag == 27){} else if($flag == 28){} else if($flag == 29){} else if($flag == 30){} else if($flag == 31){} else if($flag == 32){} else if($flag == 33){} else if($flag == 34){} else if($flag == 35){} else if($flag == 36){} else if($flag == 37){} else if($flag == 38){} else if($flag == 39){} else if($flag == 40){} // switch($flag){ // case 1: break; // case 2: break; // case 3: break; // case 4: break; // case 5: break; // case 6: break; // case 7: break; // case 8: break; // case 9: break; // case 10: break; // case 11: break; // case 12: break; // case 13: break; // case 14: break; // case 15: break; // case 16: break; // case 17: break; // case 18: break; // case 19: break; // case 20: break; // case 21: break; // case 22: break; // case 23: break; // case 24: break; // case 25: break; // case 26: break; // case 27: break; // case 28: break; // case 29: break; // case 30: break; // case 31: break; // case 32: break; // case 33: break; // case 34: break; // case 35: break; // case 36: break; // case 37: break; // case 38: break; // case 39: break; // case 40: break; // } }$time = explode(' ', microtime());$time2 = $time[1] + $time[0];echo $time2 - $time1; 既然测试代码,有心的试试我的不过效率相差无几是事实。,,function speed_if_else($i){ if($i==0){} else if($i==1){} else if($i==2){} else if($i==3){} else if($i==4){} else if($i==5){} else if($i==6){} else if($i==7){} else if($i==8){} else if($i==9){} else if($i==10){} else if($i==11){} else if($i==12){} else if($i==13){} else if($i==14){} else if($i==15){} else if($i==16){} else if($i==17){} else if($i==18){} else if($i==19){} else if($i==20){} else if($i==21){} else if($i==22){} else if($i==23){} else if($i==24){} else if($i==25){} else if($i==26){} else if($i==27){} else if($i==28){} else if($i==29){} else if($i==30){} else if($i==31){} else if($i==32){} else if($i==33){} else if($i==34){} else if($i==35){} else if($i==36){} else if($i==37){} else if($i==38){} else if($i==39){} else{}}function speed_switch($i){ switch($i) { case 0:break; case 1:break; case 2:break; case 3:break; case 4:break; case 5:break; case 6:break; case 7:break; case 8:break; case 9:break; case 10:break; case 11:break; case 12:break; case 13:break; case 14:break; case 15:break; case 16:break; case 17:break; case 18:break; case 19:break; case 20:break; case 21:break; case 22:break; case 23:break; case 24:break; case 25:break; case 26:break; case 27:break; case 28:break; case 29:break; case 30:break; case 31:break; case 32:break; case 33:break; case 34:break; case 35:break; case 36:break; case 37:break; case 38:break; case 39:break; default:; }}$result['start'] = gettimeofday(true);for($i=0;$i<100000;$i++){ speed_if_else($i%10);}$result['if_else'] = gettimeofday(true);for($i=0;$i<100000;$i++){ speed_switch($i%10);}$result['switch'] = gettimeofday(true);$temp = NULL;foreach($result AS $k=>$v){ if($temp === NULL) { $temp = $v; continue; } echo $k, ' => ', $v-$temp, '<br />'; $temp = $v;} zend studio9.03 无法调试 初学PHP,谁帮我解释下这段代码,应该很简单 php更改目录名称问题 一个关于window.open打开窗口的问题(十分奇怪) 求教,关于时间戳使用datetime和int的比较 冰天雪地赤身裸体跪求高手解决APACHE配置题(有配置文件) 高手指教,请入,急等! 高手给点分 在MySQL中如何建立一个报表,OS为XP,打开那有绿灯的界面,但不怎应该怎样操作 下拉框问题!!!!!!!!!!! apache2.2.17+php5.3.4开发环境怎样搭建???紧急 构造函数可以返回值吗?
//if else 判断(真\假)。当有复杂的表达式时可以使用//switch 选择.有多项选择时可以使用。
//switch语句:
$num=91;
switch(true){
case $num>60:
echo "及格<br/>";
case $num>80:
echo "良<br/>";
case $num>90:
echo "优<br/>";
}
//输出的结果是:
//及格
//良
//优
//也就是全部执行输出。//if语句:
$num=91;
if($num>60){
echo "及格<br/>";
}
else if(num>80){
echo "良<br/>";
}
else{
echo "优<br/>";
}
//输出的结果是:
//及格
//只执行一次//可以看出if语句效率比较高。
效率:对同一变量的不同值作提交判断时,switch效率高于if
实用性:if是实用最强和应用范围最广的语句能两者都用的的地方,一般都用switch而不用if else。因为效率差别不是一点!
switch估计系统调用的资源比if多,但选择多的时候就是switch比较好。
你直接说ifelse是符合条件就结束。
switch是执行到break才结束就行了嘛!这跟效率有啥关系?
if(xxx)
{
if(xxx)
else{xxxxxx}
}
elseif()
{
xxxx
}switch()
{
case xxx:
echo 'xxx';
breack; case yyy:
echo 'yyy';
breack;}个人感觉应该根据需求而定 效率没有高低之分 很多时候if更强大 可以处理更复杂的东东
$num=91;
switch(true){
case $num>60:
echo "及格<br/>";
break;
case $num>80:
echo "良<br/>";
break;
case $num>90:
echo "优<br/>";
break;
}
这样结果是不是不同了呢?呵呵
switch也可以
$a=5;$b=10;
switch($a)
{
case $a<10:
switch($b)
{
case $a<$b:
echo "\$a小于\$b";
break;
};
break;
default:echo "\$a大于\$b";
}虽然能嵌套 但感觉不如if好用
这样的面试题也出的出来~~~我宁愿出这样的问题
if() {
for()
}for() {
if()
}
的效率问题
现在我的理解是switch的效率高些
我没看源代码,但是ifelse 可能得做多次判断switch的case条件是可以做hash的
哎似乎就3楼说道重点囧
40条测试数据:测试1000 0000次时间如下单位(s)
if:
10.423460006714
10.440545797348
10.496639966965
10.38650894165
10.346595048904
10.430146932602
平均值:10.420649449031
switch:
11.258973121643
11.029489040375
10.988306999207
11.095635175705
11.123613834381
10.950119018555
平均值:11.0743561983111
有事要忙了,没时间测试更多的了:switch 和 if 执行速度上并没有太大区别,甚至if比switch速度还要快点,使用视具体情况而定吧
代码如下
$time = explode(' ', microtime());
$time1 = $time[1] + $time[0];
for($i = 0; $i < 10000000; $i++){
$flag = rand(1, 40);
if($flag == 1){}
else if($flag == 2){}
else if($flag == 3){}
else if($flag == 4){}
else if($flag == 5){}
else if($flag == 6){}
else if($flag == 7){}
else if($flag == 8){}
else if($flag == 9){}
else if($flag == 10){}
else if($flag == 11){}
else if($flag == 12){}
else if($flag == 13){}
else if($flag == 14){}
else if($flag == 15){}
else if($flag == 16){}
else if($flag == 17){}
else if($flag == 18){}
else if($flag == 19){}
else if($flag == 20){}
else if($flag == 21){}
else if($flag == 22){}
else if($flag == 23){}
else if($flag == 24){}
else if($flag == 25){}
else if($flag == 26){}
else if($flag == 27){}
else if($flag == 28){}
else if($flag == 29){}
else if($flag == 30){}
else if($flag == 31){}
else if($flag == 32){}
else if($flag == 33){}
else if($flag == 34){}
else if($flag == 35){}
else if($flag == 36){}
else if($flag == 37){}
else if($flag == 38){}
else if($flag == 39){}
else if($flag == 40){} // switch($flag){
// case 1: break;
// case 2: break;
// case 3: break;
// case 4: break;
// case 5: break;
// case 6: break;
// case 7: break;
// case 8: break;
// case 9: break;
// case 10: break;
// case 11: break;
// case 12: break;
// case 13: break;
// case 14: break;
// case 15: break;
// case 16: break;
// case 17: break;
// case 18: break;
// case 19: break;
// case 20: break;
// case 21: break;
// case 22: break;
// case 23: break;
// case 24: break;
// case 25: break;
// case 26: break;
// case 27: break;
// case 28: break;
// case 29: break;
// case 30: break;
// case 31: break;
// case 32: break;
// case 33: break;
// case 34: break;
// case 35: break;
// case 36: break;
// case 37: break;
// case 38: break;
// case 39: break;
// case 40: break;
// }
}
$time = explode(' ', microtime());
$time2 = $time[1] + $time[0];
echo $time2 - $time1;
{
if($i==0){}
else if($i==1){}
else if($i==2){}
else if($i==3){}
else if($i==4){}
else if($i==5){}
else if($i==6){}
else if($i==7){}
else if($i==8){}
else if($i==9){}
else if($i==10){}
else if($i==11){}
else if($i==12){}
else if($i==13){}
else if($i==14){}
else if($i==15){}
else if($i==16){}
else if($i==17){}
else if($i==18){}
else if($i==19){}
else if($i==20){}
else if($i==21){}
else if($i==22){}
else if($i==23){}
else if($i==24){}
else if($i==25){}
else if($i==26){}
else if($i==27){}
else if($i==28){}
else if($i==29){}
else if($i==30){}
else if($i==31){}
else if($i==32){}
else if($i==33){}
else if($i==34){}
else if($i==35){}
else if($i==36){}
else if($i==37){}
else if($i==38){}
else if($i==39){}
else{}
}
function speed_switch($i)
{
switch($i)
{
case 0:break;
case 1:break;
case 2:break;
case 3:break;
case 4:break;
case 5:break;
case 6:break;
case 7:break;
case 8:break;
case 9:break;
case 10:break;
case 11:break;
case 12:break;
case 13:break;
case 14:break;
case 15:break;
case 16:break;
case 17:break;
case 18:break;
case 19:break;
case 20:break;
case 21:break;
case 22:break;
case 23:break;
case 24:break;
case 25:break;
case 26:break;
case 27:break;
case 28:break;
case 29:break;
case 30:break;
case 31:break;
case 32:break;
case 33:break;
case 34:break;
case 35:break;
case 36:break;
case 37:break;
case 38:break;
case 39:break;
default:;
}
}
$result['start'] = gettimeofday(true);
for($i=0;$i<100000;$i++)
{
speed_if_else($i%10);
}
$result['if_else'] = gettimeofday(true);
for($i=0;$i<100000;$i++)
{
speed_switch($i%10);
}
$result['switch'] = gettimeofday(true);$temp = NULL;
foreach($result AS $k=>$v)
{
if($temp === NULL)
{
$temp = $v;
continue;
}
echo $k, ' => ', $v-$temp, '<br />';
$temp = $v;
}