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

acc*_*man 0 php

这可以成为一个IF三元组来缩短代码吗?我不知道怎么用多个elseif子句来做

if ($ext == "m") {
 $extype = "mp3";
}elseif ($ext == "w") {
 $extype = "wav";
}elseif ($ext == "a"){
 $extype = "aac";
}
Run Code Online (Sandbox Code Playgroud)

这是完整的功能

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';
}
Run Code Online (Sandbox Code Playgroud)

Inc*_*ito 11

你可以通过嵌套三元运算符来实现.

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

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

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

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

使用开关,使用带键数组,除此之外做任何事情.

开关:

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';
}
Run Code Online (Sandbox Code Playgroud)

该开关将匹配指定的所有情况,并且具有与其不匹配的默认操作(例如:该变量中有"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';
}
Run Code Online (Sandbox Code Playgroud)

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


bgc*_*ode 6

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

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

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