它可以在IF三元组中有两个ELSEIF子句吗?

时间:2010-12-14 20:14:40

标签: php

可以将其制成IF三元来缩短代码吗?我不知道如何使用多个elseif子句

if ($ext == "m") {
 $extype = "mp3";
}elseif ($ext == "w") {
 $extype = "wav";
}elseif ($ext == "a"){
 $extype = "aac";
}

是完整的功能

function loc($id,$type,$ext) //loc($id,'n',$ext) 
{
  if (($query = mysql_query("SELECT loc FROM names WHERE id = '".(int)$id."'")) !== false)
  {
    if (mysql_num_rows($query) > 0)
     if ($ext == "m") {
     $extype = ".mp3";
     }elseif ($ext == "w") {
     $extype = ".wav";
     }elseif ($ext == "a") {
     $extype = ".aac";
     }
      return '/rec/'.mysql_result($query,0,'loc').$id.'-'.($type=='n'?'n':'s').$extype); 

  }
  return 'Error Not Found';
}

4 个答案:

答案 0 :(得分:11)

您可以通过嵌套三元运算符来实现。

不要这样做。它会使您的代码难以理解且难以维护。

无论你想做什么,都有更好的解决方案。为了热爱世界上最好的一切,你不敢写这样的代码:

($var1 = "a") ? (a) : ((($var2 = "b") ? (b) : ((($var3 = "c") ? (c) : ((($var4 = "d") ? (d) : ((($var5 = "e") ? (e) : ((($var6 = "f") ? (f) : ((($var7 = "g") ? (g) : ((h))))))))))))));

必须保持这一点的人将成为一名psycopath。

使用switch,使用array with keys,除此之外不做任何事情。

<强>切换:

function loc($id,$type,$ext) //loc($id,'n',$ext) 
{
  if (($query = mysql_query("SELECT loc FROM names WHERE id = '".(int)$id."'")) !== false)
  {
    if (mysql_num_rows($query) > 0)
           switch ($ext) {
                case "m" : 
                     $exttype = ".mp3"; //Make sure you terminate your statements with the ; mark.
                     break;
                case "w" : 
                     $exttype = ".wma"; 
                     break;
                case "a" : 
                     $exttype = ".acc"; 
                     break;
                default : //All cases that didn't match.
                     $exttype = "";
                     break;
           }
           return '/rec/'.mysql_result($query,0,'loc').$id.'-'.($type=='n'?'n':'s').$extype); 
  }
  return 'Error Not Found';
}

交换机将匹配指定的所有情况,并且具有与之不匹配的默认操作(例如:该变量中有“O”,然后字符串变为空值)

<强>阵列

function loc($id,$type,$ext) //loc($id,'n',$ext) 
{

 $list["m"] = ".mp3";
 $list["w"] = ".wma";
 $list["a"] = ".acc";

  if (($query = mysql_query("SELECT loc FROM names WHERE id = '".(int)$id."'")) !== false)
  {
    if (mysql_num_rows($query) > 0)
         $extype = $list[$ext];
         return '/rec/'.mysql_result($query,0,'loc').$id.'-'.($type=='n'?'n':'s').$extype); 

  }
  return 'Error Not Found';
}

这个数组方法占用了更多的内存,因为数组被存储了,但是通过指定数组的键并将其与它的值匹配,你可以从中获得该值。缺点是您需要为不在数组中的项目的默认值编程(同样,如果您有变量“O”,它将不会找到匹配的数组键值对并出现错误)。

答案 1 :(得分:6)

看起来你最好使用开关而不是IF / ELSE

switch ($ext) {
    case 'm':
        $extype = '.mp3';
        break;
    case 'w':
        $extype = '.wav';
        break;
    case 'a':
        $extype = '.aac';
        break;
    default:
        $extype = '.wma';
        break;
}

另外,听起来你需要在php.net上阅读有关数组和控制结构的文档。

答案 2 :(得分:1)

有一种称为“switch”的声明。

不要害怕 - 这是你的朋友。

答案 3 :(得分:1)

是的,这是可能的,但我不推荐它:

echo (($ext == "m") ? $extype = "mp3" : (($ext == "w") ? $extype = "wav" : (($ext == "a") ? $extype = "aac" : '')));