是否有一种方法使用'OR'操作符或等价的PHP开关?
例如,这样的东西:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
是否有一种方法使用'OR'操作符或等价的PHP开关?
例如,这样的东西:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
当前回答
匹配表达式(PHP 8)
PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:
不需要break语句 使用逗号组合条件 返回一个值 具有严格的类型比较 要求比较是详尽的(如果没有找到匹配,UnhandledMatchError将被抛出)
例子:
match ($value) {
0 => '0',
1, 2 => "1 or 2",
default => "3",
}
其他回答
使用以下代码:
switch($a) {
case 1:
case 2:
.......
.......
.......
break;
}
1和2都调用该块。
匹配表达式(PHP 8)
PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:
不需要break语句 使用逗号组合条件 返回一个值 具有严格的类型比较 要求比较是详尽的(如果没有找到匹配,UnhandledMatchError将被抛出)
例子:
match ($value) {
0 => '0',
1, 2 => "1 or 2",
default => "3",
}
最好的办法可能是如果其他请求。此外,这可以更容易和清楚地使用。
例子:
<?php
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>
而不是使用不适合PHP的函数,尤其是在HTML中使用PHP时。
我不会转发其他答案,因为它们都是正确的,但我只想补充一点,你不能对更“复杂”的语句使用switch,例如:测试一个值是否“大于3”,“在4和6之间”,等等。如果你需要做类似的事情,坚持使用If语句,或者如果有一个特别强烈的开关需求,那么可以使用它从后到前:
switch (true) {
case ($value > 3) :
// value is greater than 3
break;
case ($value >= 4 && $value <= 6) :
// value is between 4 and 6
break;
}
但如我所说,我个人会在这里使用if语句。
请尝试本文中的以下示例:http://phpswitch.com/
可能的切换案例:
(i).简单的switch语句
switch语句是奇妙而神奇的。它是语言的一部分,允许您在值的不同选项之间进行选择,并根据设置的值运行不同的代码段。
每个可能的选项都由switch语句中的大小写给出。
例子:
switch($bar)
{
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
}
(ii).分隔代码块
switch的主要警告是,每个case都会运行到下一个case,除非你用break停止它。如果将上面的简单情况扩展到情况5:
例子:
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
break;
case 5:
echo "A copy of Ringworld is on its way to you!\n";
$foo = 34;
break;
(iii).对多种情况使用过渡
因为switch会一直运行代码,直到它找到一个断点,所以我们很容易就可以采用fallthrough的概念,在多个情况下运行相同的代码:
例子:
案例2:
case 3:
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
break;
case 5:
echo "A copy of Ringworld is on its way to you!\n";
$foo = 34;
break;
(iv).高级切换:条件情况
PHP的开关不仅允许您打开特定变量的值:您可以使用任何表达式作为case之一,只要它为case提供了要使用的值。举个例子,下面是一个使用switch编写的简单验证器:
例子:
switch(true)
{
case (strlen($foo) > 30):
$error = "The value provided is too long.";
$valid = false;
break;
case (!preg_match('/^[A-Z0-9]+$/i', $foo)):
$error = "The value must be alphanumeric.";
$valid = false;
break;
default:
$valid = true;
break;
}
我想这也许能帮你解决问题。