我发现这篇文章:Switch case with three parameters?我正在考虑使用switch case传递多个参数,如下所示:
switch (array($var1, $var2, $var3)) {
case array(true, false, false):
echo "hello";
break;
}
对于这是否是最有效的方法,似乎存在一些疑问。情绪似乎是if条件更合适。但是,当我看到我正在写的条件时,我不确定?例如,这感觉很乱(注意我已经删除了大约6个其他条件,以免让你厌烦):
if (
csz == "google" ||
csz == "bing" ||
csz == "yahoo" ||
csz == "dogpile" ||
csz == "millionshort" &&
cs == '' ) {
$("li.phone").replaceWith('<li class="phone">' + phoneNaturalSearch + '</li>');
}
else if (
csz == "facebook" &&
cs == '' ) {
$("li.phone").replaceWith('<li class="phone">' + phoneFacebook + '</li>');
}
else if (
csz == "google-plus" ||
csz == "plus" ) {
$("li.phone").replaceWith('<li class="phone">' + phoneGooglePlus + '</li>');
}
// Snipped out other conditionals
else {
$("li.phone").replaceWith('<li class="phone">' + phoneDefault + '</li>');
}
在这里切换多个参数会更有效率,还是会遇到性能损失?我想我应该编写代码并查看它是否真的不那么混乱,但我认为我会先从大师那里反弹。
答案 0 :(得分:5)
我觉得如果你有这么多条件我更喜欢使用switch语句,这会使你的代码更清晰,更容易理解。 您可以省略针对此特定类别的条件的中断...
var phoneType= '';
switch(csz){
case "google" :
case "bing" :
case "yahoo" :
case "dogpile" :
case "millionshort" :
if (cs==''){
phoneType = phoneNaturalSearch ;
break;
}
else {
goto case "facebook";
}
case "facebook" :
if (cs==''){
phoneType = phoneFacebook ;
break;
}
else {
goto case "google-plus";
}
case "google-plus" :
case "plus" :
phoneType = phoneGooglePlus ;
break;
default :
phoneType = phoneDefault ;
break;
}
$("li.phone").replaceWith('<li class="phone">' + phoneType + '</li>');
答案 1 :(得分:0)
谈论更简洁的解决方案,另一种方法是将它们保存在二维数组中并检索元素索引。
检查出来:
var csz= 'amazon';
var groups = [['google','yahoo','bing'],['facebook','orkut','hi5','zurker'],['amazon','bestbuy','sears']];
var groupIndex = getIndexOf(groups,csz);
if(groupIndex ==1){
//code here
alert("1");
}else if(groupIndex ==2){
//code here
alert("2");
}else if(groupIndex ==3){
//code here
alert("3");
}
function getIndexOf(myArray,element){
for(var i=0;i<groups.length;i++){
for(var j=0;j<groups[i].length;j++){
if(myArray[i][j]==element){
return i;
}
}
}
return -1;
}