可以将其制成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';
}
答案 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" : '')));