PHP开关情况超过1值的情况下
我还有另外一种情况。我有保持值的变量(“每周”,“每月”,“每季度”,“年度”)和I具有保存的值从1到10PHP开关情况超过1值的情况下
switch ($var2) {
case 1:
$var3 = 'Weekly';
break;
case 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4:
$var3 = 'Quarterly';
break;
case 5:
$var3 = 'Quarterly';
break;
// etc.
}
它不是另一个变量”很漂亮,因为我的代码有很多重复的东西。我想要的:
switch ($var2) {
case 1, 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4, 5:
$var3 = 'Quarterly';
break;
}
我该如何在PHP中做到这一点?先谢谢你。对不起我的英语不好。
最简单,可能是最好的方式表现明智的是:
switch ($var2) {
case 1:
case 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4:
case 5:
$var3 = 'Quarterly';
break;
}
也,不可能性的更复杂的情况:
switch ($var2) {
case ($var2 == 1 || $var2 == 2):
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case ($var2 == 4 || $var2 == 5):
$var3 = 'Quarterly';
break;
}
在这种情况下
,$ VAR2必须设置,不能null或0
switch ($var2) {
case 1 :
case 2 :
$var3 = 'Weekly';
break;
case 3 :
$var3 = 'Monthly';
break;
case 4 :
case 5 :
$var3 = 'Quarterly';
break;
}
第一个匹配大小写后面的所有内容都将执行到中断声明被发现。所以这只是下一个案例,它允许你“组合”案件。
交换机在AB测试中也非常方便。这里随机测试4个不同版本的东西的代码:
$abctest = mt_rand(1, 1000);
switch ($abctest) {
case ($abctest < 250):
echo "A code here";
break;
case ($abctest < 500):
echo "B code here";
break;
case ($abctest < 750):
echo "C code here";
break;
default:
echo "D code here";
break;
恭喜你与你的第一个答案!但是,这是关闭:) – pltvs 2014-02-03 11:30:10
如果没有这些硬编码的数字呢? – 2014-12-27 20:54:28
我正在寻找这个答案......谢谢@足球。 – user1735921 2016-12-04 21:15:42
'($ var2 == 1 || $ var2 == 2)'可能无法正常工作,具体取决于'$ var2'是什么。如果'$ var2 = 0',第一个案例将被执行。它也比简单的'case'风格更加冗长。你也经常“打破”一点。 – deceze 2010-11-12 09:42:39
@deceze,同意,这就是为什么我先把另一个解决方案,它只是一个“复杂”布尔比较的例子 – Hannes 2010-11-12 09:51:06
**如果**你要使用这种风格,至少通过使条件工作正确正确的:'switch(true){case($ a || $ b):...}' – deceze 2010-11-12 09:52:48