这可以成为一个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",它将不会找到匹配的数组键值对并出现错误).
看起来你最好用开关而不是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上阅读有关数组和控制结构的文档.