如何在 PHP 中使用 switch case 'or'
Posted
技术标签:
【中文标题】如何在 PHP 中使用 switch case \'or\'【英文标题】:How to use a switch case 'or' in PHP如何在 PHP 中使用 switch case 'or' 【发布时间】:2010-09-17 10:41:58 【问题描述】:有没有办法在 php 开关中使用“或”运算符或等效运算符?
例如,像这样的:
switch ($value)
case 1 || 2:
echo 'the value is either 1 or 2';
break;
【问题讨论】:
【参考方案1】:switch ($value)
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
这被称为“通过”案例块。该术语存在于大多数实现 switch 语句的语言中。
【讨论】:
【参考方案2】:如果您必须将||
与switch
一起使用,那么您可以尝试:
$v = 1;
switch (true)
case ($v == 1 || $v == 2):
echo 'the value is either 1 or 2';
break;
如果不是,您的首选解决方案将是
switch($v)
case 1:
case 2:
echo "the value is either 1 or 2";
break;
问题是这两种方法在处理大型案件时都效率不高……想象一下1
到100
这会很好用
$r1 = range(1, 100);
$r2 = range(100, 200);
$v = 76;
switch (true)
case in_array($v, $r1) :
echo 'the value is in range 1 to 100';
break;
case in_array($v, $r2) :
echo 'the value is in range 100 to 200';
break;
【讨论】:
switch (true)
是一种反模式,它消除了 switch 块的唯一好处——一次评估。相反,每个案例都需要评估,并且所有break
调用都会生成一个详细的sn-p。我永远不会在专业项目中使用这种反模式。【参考方案3】:
我不会重新发布其他答案,因为它们都是正确的,但我只是补充一点,您不能将 switch 用于更“复杂”的语句,例如:测试一个值是否“大于 3 ”、“介于 4 和 6 之间”等。如果您需要这样做,请坚持使用 if
语句,或者如果对 switch
的需求特别强烈,则可以从后向前使用:
switch (true)
case ($value > 3) :
// value is greater than 3
break;
case ($value >= 4 && $value <= 6) :
// value is between 4 and 6
break;
但正如我所说,我个人会在那里使用if
声明。
【讨论】:
很高兴看到您在这种情况下推荐 if() 而不是 switch()。这种开关只会增加复杂性,IMO。 是的,你必须有一个相当有说服力的理由才能选择这种风格,但很高兴知道这是可能的。 我真的很高兴了解到这一点。每次我用 Basic-y 语言构建项目时,我都会想念 C 风格的switch()
,而当我使用 C ish 语言工作时,我真的很想念 Select Case
,这真的是一种速记方式说“这里有一大堆 if、else if、else-if ...”。
you can't use switch for more "complicated" statements
是 can't
还是 shouldn't
?因为在你的例子中你can
@Sharky 他的意思是 switch 的普通用例不能。 switch (true)
这种东西可不是普通的 switch 用例。【参考方案4】:
在本文中尝试以下示例:http://phpswitch.com/
可能的切换案例:
(i)。 一个简单的 switch 语句
switch 语句奇妙而神奇。它是一种语言,允许您在值的不同选项之间进行选择,并根据设置的值运行不同的代码。
每个可能的选项都由 switch 语句中的一个 case 给出。
示例:
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 的开关不仅允许您打开特定变量的值:您可以使用任何表达式作为其中一种情况,只要它为要使用的情况提供值即可。例如,这是一个使用 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;
我认为这可以帮助您解决问题。
【讨论】:
您有示例 (iv) 的实际用例吗?switch (true)
是一种反模式,它消除了 switch 块的唯一好处——一次评估。相反,每个案例都需要评估,并且所有break
调用都会生成详细的sn-p。我永远不会在专业项目中使用这种反模式。【参考方案5】:
试试
switch($value)
case 1:
case 2:
echo "the value is either 1 or 2";
break;
【讨论】:
【参考方案6】:我建议你通过switch(手动)。
switch ($your_variable)
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
说明
就像你想要执行单个语句的值一样,你可以把它放在没有 break 的情况下,就像直到或除非找到 break 一样。它将继续执行代码,如果发现 break,它将退出 switch 情况。
【讨论】:
我会再次标记break
,以便开发人员的眼睛可以快速追踪case
表达式。【参考方案7】:
匹配表达式 (PHP 8)
PHP 8 introduced 一个新的 match
表达式,与 switch
相似,但语法更短,但有以下区别:
break
语句
使用逗号组合条件
返回一个值
具有严格的类型比较
要求比较详尽(如果未找到匹配项,将抛出UnhandledMatchError
)
例子:
match ($value)
0 => '0',
1, 2 => "1 or 2",
default => "3",
【讨论】:
虽然这样说是对的,但实际上与问题无关。switch
已经提供了不止一种方法来完成 OP 想要的。
也就是说,这个页面代表了一个很好的机会来推广 PHP 中一个奇妙的、现代的替代功能。【参考方案8】:
使用此代码:
switch($a)
case 1:
case 2:
.......
.......
.......
break;
块被 1 和 2 调用。
【讨论】:
【参考方案9】:请注意,您还可以使用闭包将开关的结果(使用早期返回)分配给变量:
$otherVar = (static function($value)
switch ($value)
case 0:
return 4;
case 1:
return 6;
case 2:
case 3:
return 5;
default:
return null;
)($i);
当然,这种方式已经过时了,因为这正是新 PHP 8 match function 的目的,如 _dom93 答案所示。
【讨论】:
【参考方案10】:switch ($value)
case 1:
case 2:
echo 'the value is either 1 or 2';
break;
【讨论】:
【参考方案11】:http://php.net/manual/en/control-structures.switch.php 示例
$today = date("D");
switch($today)
case "Mon":
case "Tue":
echo "Today is Tuesday or Monday. Buy some food.";
break;
case "Wed":
echo "Today is Wednesday. Visit a doctor.";
break;
case "Thu":
echo "Today is Thursday. Repair your car.";
break;
default:
echo "No information available for that day.";
break;
【讨论】:
default
案例不需要break
。【参考方案12】:
最好的方法可能是请求。此外,这可以更容易、更清晰地使用。
例子:
<?php
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information')?>
<div>
echo "hello";
?>
不要使用不能很好地与 PHP 配合使用的函数,尤其是当您在 html 中使用 PHP 时。
【讨论】:
以上是关于如何在 PHP 中使用 switch case 'or'的主要内容,如果未能解决你的问题,请参考以下文章