Как использовать переключатель case 'или' в PHP

Есть ли способ использования оператора «ИЛИ» или его эквивалента в переключателе PHP?

Например, примерно так:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
244
0
292 947
12

Ответы 12

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

Это называется «провалом» корпуса. Этот термин существует в большинстве языков, реализующих оператор switch.

Пытаться

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

Я не буду публиковать другие ответы, потому что все они верны, но я просто добавлю, что вы не можете использовать переключатель для более «сложных» утверждений, например: чтобы проверить, является ли значение «больше 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 () в этом случае. Такой переключатель просто добавляет сложности, ИМО.

moo 16.10.2008 06:08

да, у вас должна быть достаточно веская причина, чтобы выбрать этот стиль, но хорошо знать, что это возможно.

nickf 16.10.2008 06:14

Я действительно рад узнать это. Каждый раз, когда я создаю проект на языке Basic-y, мне не хватает switch() в стиле C, а когда я работаю на языке C-ish, мне очень не хватает Select Case, что на самом деле является сокращенным способом сказать «есть большой блок if, else if, else-if ... here ".

Stan Rogers 09.10.2010 11:50

you can't use switch for more "complicated" statements это can't или это shouldn't? потому что в вашем примере вы can

Sharky 24.03.2015 11:29

@Sharky он имел в виду, что обычный вариант использования переключателя не может. Такой тип switch (true) не является обычным вариантом использования коммутатора.

Chen Li Yong 01.10.2016 12:35

Лучшим способом могло бы быть иначе с запросом. Кроме того, это может быть проще и понятнее в использовании.

Пример:

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

Вместо использования функций, которые не будут работать с PHP, особенно если у вас PHP в HTML.

Если вам необходимо использовать || с 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($a) {
    case 1:
    case 2:
        .......
        .......
        .......
        break;
}

Блок вызывается как для 1, так и для 2.

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

Предлагаю пройти выключатель (manual).

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

Объяснение

Как и для значения, для которого вы хотите выполнить один оператор, вы можете поместить его без перерыв, как до или до тех пор, пока не будет обнаружен разрыв. Он продолжит выполнение кода, и если будет обнаружен перерыв, он выйдет из случая выключатель.

Попробуйте воспользоваться следующими примерами из этой статьи: http://phpswitch.com/

Возможные варианты переключения:

(я). Простой оператор switch

Заявление switch удивительно и волшебно. Это часть языка, которая позволяет вам выбирать между различными вариантами значения и запускать разные фрагменты кода в зависимости от того, какое значение установлено.

Каждый возможный вариант задается регистром в операторе switch.

Пример :

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

(ii). Разграничение блоков кода

Главное предостережение при переключении заключается в том, что каждый случай будет переходить в следующий, если вы не остановите его с помощью 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). Использование провала для нескольких случаев

Поскольку коммутатор будет выполнять код до тех пор, пока не найдет перерыв, достаточно легко принять концепцию провала и запустить один и тот же код для более чем одного случая:

Пример :

случай 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)?

Pedro Moreira 12.06.2015 17:17

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;

    }

Выражение соответствия (PHP 8)

PHP 8 RFC представил новое выражение match, похожее на switch, но с более коротким синтаксисом:

  • не требует инструкций break
  • объединить условия через запятую
  • возвращает значение

Пример:

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

Обратите внимание, что вы также можете использовать закрытие для присвоения результата переключения (с использованием раннего возврата) переменной:

$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 функция соответствия, как указано в ответе _dom93.

Другие вопросы по теме