PHP switch语句在多种情况下具有相同的值

时间:2014-07-17 14:24:32

标签: php switch-statement

与使用多个if else相比,我更喜欢switch语句的结构。 但有时我想使用switch语句并在多种情况下具有相同的值。这可以以某种方式完成吗?

switch($fruit) {
  case 'apple':
  case 'orange':
    // do something for both apples and oranges
    break;

  case: 'apple':
    // do something for only apples
    break;

  case: 'orange':
    // do something for only oranges
    break;
}

我希望我的例子能说明我打算做什么......

3 个答案:

答案 0 :(得分:4)

不,它不能。匹配的第一个case及其后的所有内容将执行,直到第一个break语句或switch语句的结尾。如果您break,则会突破switch语句,无法重新输入。你能做的最好的是:

switch ($fruit) {
    case 'apple':
    case 'orange':
        ...

        switch ($fruit) {
            case 'apple':
                ...
            case 'orange':
                ...
        }
}

但实际上,不要。如果您需要在个人switch之前对这两个人采取特殊措施,请在if (in_array($fruit, ['apple', 'orange'])) ...之前执行switch。或者重新考虑整个程序的逻辑和结构。

答案 1 :(得分:2)

创建一些函数,并按照以下方式执行:

switch($fruit) {

  case: 'apple':
    apple_and_orange_function();
    apple_function();
    break;

  case: 'orange':
    apple_and_orange_function();
    orange_function();
    break;
}

答案 2 :(得分:0)

你不能多次匹配,但你可以写下这样的级联:

switch($fruit) {
  case 'apple':
    // do something for only apples
  case 'orange':
    // do something for both apples and oranges
    break;
  case: 'grapefruit':
    // do something for only grapefruits
    break;
}

您想要的只能通过if-else或deceze的解决方案执行