我有另一种情况。我有一个包含值的变量('Weekly','Monthly','Quarterly','Annual'),我有另一个变量,它保存从1到10的值。
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中做到这一点?先感谢您。抱歉我的英文。
答案 0 :(得分:95)
表现明智的最简单且最好的方式是:
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
答案 1 :(得分:8)
switch ($var2) {
case 1 :
case 2 :
$var3 = 'Weekly';
break;
case 3 :
$var3 = 'Monthly';
break;
case 4 :
case 5 :
$var3 = 'Quarterly';
break;
}
第一个匹配案例之后的所有内容都将被执行,直到找到break语句。所以它只是落到下一个案例,它允许你“分组”案件。
答案 2 :(得分:0)
您可以使用数组来存储匹配组;喜欢:
<?php
$names = array('Ian', 'Jack', 'Fred', 'Ismail');
$name = 'Vladimir';
switch ($name) {
case (in_array($name, $names)):
echo '<p> Welcome ' . $name . '</p>';
break;
default:
echo '<p>' . $name . ' is a stranger to me?</p>';
}
?>
答案 3 :(得分:0)
如果您正在阅读本文并且年份是 2021 年及以后,并且您还在使用 PHP >8.0,那么您现在可以为此使用新的 match 表达式。
这可能是
$var3 = match($var2){
1,2 => 'Weekly',
3 => 'Monthly',
4,5 => 'Quarterly'
};
阅读更多关于匹配表达式here
答案 4 :(得分:-1)
Switch对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;