如何在PHP中使用switch case'或'?

时间:2008-10-16 00:25:14

标签: php switch-statement case

有没有办法在php开关中使用'OR'运算符或等效运算符?例如,像这样:

switch ($value) {

case 1 || 2:
echo 'the value is either 1 or 2';
break;

}

13 个答案:

答案 0 :(得分:464)

switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

这称为“通过”案件块。该术语存在于实现switch语句的大多数语言中。

答案 1 :(得分:124)

如果您必须将||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;
}

问题在于,在处理大型案例时,这两种方法效率都不高......想象1100这可以完美地运作

$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;
}

答案 2 :(得分:52)

我不会重新发布其他答案,因为它们都是正确的,但我只是补充一点,你不能将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声明。

答案 3 :(得分:36)

尝试使用本文中的以下示例:http://phpswitch.com/

可能的转换案例:

(i)中。 简单的切换声明

切换声明是神奇而神奇的。它是一种语言,允许您在值的不同选项之间进行选择,并根据设置的值运行不同的代码片段。

每个可能的选项都由switch语句中的一个案例给出。

示例:

switch($bar)
{
    case 4:
        echo "This is not the number you're looking for.\n";
        $foo = 92;
}

(ii)中。 分隔代码块

切换的主要警告是每个案例都将继续进入下一个案例,除非你以休息方式停止它。如果上面的简单案例扩展到案例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;
}

我认为这可以帮助您解决问题。

答案 4 :(得分:15)

尝试

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

答案 5 :(得分:9)

我建议你通过 http://php.net/manual/en/control-structures.switch.php(手册)

switch ($your_variable)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

<强>解释

对于你要执行单个语句的值,你可以把它放在没有休息的地方 直到或除非发现中断,它将继续执行代码,如果发现中断,它将从交换机案例中出来。

答案 6 :(得分:2)

匹配表达式(PHP 8)

PHP 8 RFC引入了一个新的match表达式,该表达式类似于switch,但语法较短:

  • 不需要break语句
  • 使用逗号组合条件
  • 返回值

示例:

match ($value) {
  0 => '0',
  1, 2 => "1 or 2",
  default => "3",
}

答案 7 :(得分:1)

使用此代码:

switch($a) {
case 1:
case 2:
    .......
    .......
    .......
    break;
}

该块要求1和2。

答案 8 :(得分:1)

switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}

答案 9 :(得分:0)

请注意,您还可以使用闭包将切换结果(使用早期返回)分配给变量:

// This is my interface

interface IPhoto {
   albumId: number;
   id: number;
   title: string;
   url: string;
   thumbnailUrl: string;
}

// Property in my class. This is an array that I will reference when
// receiving the data from API
public postArray: IPhoto[];

// This is my function fetching the api
fetchApiPhotos() {
    const apiUrl = 'https://jsonplaceholder.typicode.com/photos';
    return this.http.get(apiUrl).pipe(
        map((responseData: IPhoto[]) => {
            // I now assign the value to my array
            return this.postArray = responseData;
        })
    );
}

// Here's the HTML template
// Loop through the array and display the id
// on click of a button have a function that emits the data to be received by
// component two.
<article>
   <div *ngFor="let photo of postArray">
       <h2>{{photo.id}}</h2>
       <button (click)="showPhotoDetails(photo)">Details</button>
   </div>
</article>

// Function when you click the button
// This will emit/dispatch the data and the second component can 
// then receive it.
showPhotoDetails(photo: IPhoto) {
    this.photoItemClicked.emit(photo);
}

这种方法当然已经过时了,因为它正是match function答案中所指出的新PHP 8 _dom93的目的。

答案 10 :(得分:0)

更新 PHP 8.0

您可以使用在 PHP 8.0 中实现的新表达式 matchDocumentation

您的示例可以如下使用:

$value = 2;

echo match ($value) {
    1, 2 => 'the value is either 1 or 2',
    default => '',
};

记住匹配表达式必须满足其中一个值。如果没有满足任何值,则抛出 UnhandledMatchError。

答案 11 :(得分:-2)

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;

    }

答案 12 :(得分:-4)

最好的方法可能是请求的其他方式。此外,这可以更容易和清晰地使用。

示例:

<?php 
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>

而不是使用不能与PHP一起使用的函数,尤其是当您使用HTML格式的PHP时。