注意switch 语句的写法,以上还是用IF语句好。
请多查查手册。switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。 下面两个例子使用两种不同方法实现同样的事,一个用一系列 if 语句,另一个用 switch 语句: 
if ($i == 0) {
    print "i equals 0";
} elseif ($i == 1) {
    print "i equals 1";
} elseif ($i == 2) {
    print "i equals 2";
}switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}
为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。例如: 
switch ($i) {
    case 0:
        print "i equals 0";
    case 1:
        print "i equals 1";
    case 2:
        print "i equals 2";
}这里如果 $i 等于 0,PHP 将执行所有的 print 语句!如果 $i 等于 1,PHP 将执行后面两条 print 语句。只有当 $i 等于 2 时,你才得到“预期”的结果 - 只显示“i equals 2”。所以,别忘了 break 语句就很重要(即使在某些情况下你故意想避免提供它们时)。 在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些。 在一个 case 中的语句也可以为空,这样只不过将控制转移到了下一个 case 中的语句。 
switch ($i) {
    case 0:
    case 1:
    case 2:
        print "i is less than 3 but not negative";
        break;
    case 3:
        print "i is 3";
}一个 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情况,并且应该是最后一条 case 语句。例如: 
switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}
case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除了到简单类型的引用。

解决方案 »

  1.   

    你的意思是还是让我用if语句写?
    if($user_name && $age && $state){
    $sql="...";
    }elseif($user_name && $age){
    $sql="...";
    }elseif($user_name && $state){
    $sql="...";
    }elseif($age && $state){
    $sql="...";
    }elseif($user_name){
    $sql="...";
    }elseif($age){
    $sql="...";
    }elseif($state){
    $sql="...";
    }else{
    echo "请输入你的查询条件";
    exit;
    }
    可是我觉得这样写太麻烦了,如果写成swicth语句
    switch{
       case $user_name && $age && $state:
           $sql="...";
           break;
       case $user_name && $age:
           $sql="...";
           break;
       case $user_name && $state:
           $sql="...";
           break;
       case $age && $state:
           $sql="...";
           break;
       case $user_name: 
           $sql="...";
           break;
       case $age:
           $sql="...";
           break;
       case $state:
           $sql="...";
           break;
       default:
           echo "请输入你的查询条件";
    }
    可是这两段程序那个执行速度比较快一点?
    那个相对好一点呢?
      

  2.   

    不可以这样写
    switch($key) {
       case val:
    }
    结构需要一个唯一的键
      

  3.   

    是不是要改成这样呢?
    switch($key){
       case val:$user_name && $age && $state:
           $sql="...";
           break;
       case val:$user_name && $age:
           $sql="...";
           break;
       case val:$user_name && $state:
           $sql="...";
           break;
       case val:$age && $state:
           $sql="...";
           break;
       case val:$user_name: 
           $sql="...";
           break;
       case val:$age:
           $sql="...";
           break;
       case val:$state:
           $sql="...";
           break;
       default:
           echo "请输入你的查询条件";
    }
      

  4.   

    真是很奇怪.if...else...和switch不是一样的么?为什么你一定要用switch?
      

  5.   

    这样写很另类的
    <?php
    $a=0;
    $b=2;
    $c=3;
    switch(1) {
      case $a==1:
        echo "a=1";
        break;
      case $b==2 || $c=3:
        echo "b=2 c=3";
        break;
    }
    ?>
    还是传统一些较好。具我所知,只有很少的高级语言支持这种写法。我你想不会永远都是php吧?!
      

  6.   

    其实if elseif else结构是所有路程控制中最清晰、最基本的一种,通常可以胜任很多情况。而switch只不过在“单一表达式多值”的情况下被钟爱。如果本身一个案例的可能情况很多,比如楼主的问题,肯定要写一定量的判断语句——总要把问题说清楚啊。
      

  7.   

    $sql="select * from publication where 1=1 ";
    if(isset($aa))
    {
    $sql=$sql." and aa=$aa ";
    }
    if(isset($bb))
    {
    $sql=$sql." and bb=$bb ";
    }
    if(isset($cc))
    {
    $sql=$sql." and cc=$cc ";
    }
    $sql=$sql." order by id desc ";你这样写,这样写思路就清晰了!
      

  8.   

    我同意bonniewater(陪你去看海) 的说法。
      

  9.   

    你这个例子还是用if......else为好,switch更适合于多重循环