问题什么时候用if else什么手用switch
这两个小爱什么情况下用的时候那个效率高
谁能给出为什么效率高的解释

解决方案 »

  1.   


    //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语句效率比较高。
      

  2.   

    这两个都是对条件进行判断,区别主要在于
    效率:对同一变量的不同值作提交判断时,switch效率高于if
    实用性:if是实用最强和应用范围最广的语句能两者都用的的地方,一般都用switch而不用if else。因为效率差别不是一点!
      

  3.   

    分支较少,一般选择 if else或者是三目运算:?,较多情况通常选择switch假设每种情况几率相等,if else为了命中条件,选择的平均复杂度为O(n/2),而switch为O(1);在条件较多情况下,switch的优势会体现出来前面#1贴的switch语句是有问题的
      

  4.   

    1楼举的例子恰恰相反,你为什么指定$num=91!在判断的时候,$num一般是作为未知的,不是像这样要执行几次就看出效率的
      

  5.   

    对同一值或语句的较多情况判断用switch其他情况用if else
      

  6.   

    switch 只能判断 int char 
     
      

  7.   

    同意3楼,看选择的情况而定。没有说一定哪个比较好用。
    switch估计系统调用的资源比if多,但选择多的时候就是switch比较好。
      

  8.   

    1楼,你这个例子有点那个啊!
    你直接说ifelse是符合条件就结束。
    switch是执行到break才结束就行了嘛!这跟效率有啥关系?
      

  9.   

    其实都一样
    if(xxx)
    {
      if(xxx)
      else{xxxxxx}
      
    }
    elseif()
    {
      xxxx
    }switch()
    {
     case xxx:
     echo 'xxx';
     breack; case yyy:
     echo 'yyy';
     breack;}个人感觉应该根据需求而定 效率没有高低之分 很多时候if更强大 可以处理更复杂的东东
      

  10.   


    $num=91;
    switch(true){
    case $num>60:
       echo "及格<br/>";
       break;
    case $num>80:
       echo "良<br/>";
       break;
    case $num>90:
       echo "优<br/>";
       break;
    }
    这样结果是不是不同了呢?呵呵
      

  11.   

    if拥有强大的嵌套功能 switch能做到吗?
      

  12.   

    为什么不能?!!!
    switch也可以
      

  13.   

    嗯?switch我还没用过嵌套 给个例子 这个怎么嵌套?
      

  14.   

    刚才百度一下 写出了本人第一个嵌套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好用
      

  15.   

    纯粹误导 我用起来没感到有差别 switch在有些时候代码看起来更整洁一些 读起来一目了然 有些时候没有if好用 比如我判断静态文件x不存在 就重新连接数据库进行动态生成静态 这时候你用switch试试 就知道哪个更好用了 所以二者的区别不是效率的差别 而是使用条件的差别
      

  16.   

    这是哪家公司面试的
    这样的面试题也出的出来~~~我宁愿出这样的问题
    if() {
     for()
    }for() {
      if()
    }
    的效率问题
      

  17.   

    我觉的吧,switch使用于对判断有点规律的,而if else判断的是没什么规律的!这样他们的效率才能体现出来!
      

  18.   

    switch语句应该是int,byte,char吧
      

  19.   

    这个可是xx著名网络公司问我的面试题啊哎!!囧 我可能不会选择这家公司了其实是要看看zend framework的代码的
    现在我的理解是switch的效率高些
    我没看源代码,但是ifelse 可能得做多次判断switch的case条件是可以做hash的
    哎似乎就3楼说道重点囧
      

  20.   

    对于你的问题,我做了如下测试
    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;
      

  21.   

    既然测试代码,有心的试试我的不过效率相差无几是事实。,,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;
    }