Выполнение нескольких случаев с использованием инструкции PHP switch

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

$value = 'AA'; switch ($value) { case 'AA': echo "value equals 1"; continue; case 'BB': echo "value equals 2"; continue; case 'CC' || 'AA': echo "value equals 3"; break; } 

То, что я ожидаю от вышеуказанного кода, – это выполнение нескольких случаев на основе переданных значений, переменная $ value содержит значение AA поэтому я ожидаю, что он выполнит оба

case 'AA' и
case 'CC' || 'AA'

поэтому он должен печатать value equals 1 value equals 3 но он не выполняет его таким образом, что я получаю только value equals 1 качестве вывода. и если я удаляю continue из инструкции, он выполняет все три cases которые логически ошибочны. выполняет ли инструкция PHP-скрипта несколько случаев, которые должны выполняться на основе одного значения? есть ли обходной путь для этого?

Спасибо..

Когда break отсутствует, оператор switch позволяет перейти к следующему условию:

 $value = 'AA'; switch ($value) { case 'AA': echo "value equals 1"; // this case has no break, enables fallthrough case 'CC': echo "value equals 3"; // this one executes for both AA and CC break; case 'BB': echo "value equals 2"; break; } 

Оператор switch нуждается в литералах в блоках case. Вместо этого используйте утверждения if .

Вы можете использовать другие типы циклов для iterate по значению, а затем использовать IF для сравнения. Выполнение сравнения / проверки условий невозможно в случаях switch .

Один из способов добиться того, что вы хотите сделать, – это так (обратите внимание, что IF используется):

 $value = 'AA'; switch($value) { case ('AA'): echo "value equals 1<br />"; case ('BB'): if ($value == 'BB'){ echo "value equals 2<br />"; } case (('AA') || ('CC')): echo "value equals 3<br />"; break; } 

Выходы:

 value equals 1 value equals 3 

ПРИМЕЧАНИЕ. – вышеупомянутое решение не подходит, хотя оно выводит то, что вам нужно, это не правильное решение, и, если возможно, я бы рекомендовал избегать. Ваши потребности могут быть легко устранены с использованием альтернатив без переключения / случая.

Работа вокруг состоит в том, чтобы использовать набор операторов if и else if . Условия в case утверждений не оцениваются.

 if($value == 'AA') { echo "value equals 1"; } else if($value == 'CC') { echo "value equals 3"; } else { //Or else if($value == 'BB') if you might add more at some point echo "value equals 2"; } 

Инструкция continue (или break ) заканчивается в каждом case . Если он опущен, выполнение будет пропущено к следующему case (поэтому все три выполняются в вашем случае – они проваливаются через все из них, вплоть до конца. Если в case , когда было выполнено continue или break , провалился, выполнение остановится там).

После прочтения документации я вижу, что операторы switch могут иметь несколько случаев, которые оценивают true, но не несколько блоков блоков, которые оценивают true.

Кроме того, в документации указано, что break; и continue; в объеме switch эквивалентны.

Если вы оставите весь break; и continue; вы увидите, что все они печатаются независимо от соответствия. Вы должны использовать менее интересные if / else / ifelse заявления для этой головоломки.

http://php.net/manual/en/control-structures.switch.php

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

 $value = 'AA'; switch ($value) { case 'AA': echo "value equals 1"; continue; case 'BB': echo "value equals 2"; continue; case $value == 'CC' || $value=='AA': echo "value equals 3"; break; } 

Или вы можете просто написать свой код в этом формате (поместите два разных случая для этого)

 $value = 'AA'; switch ($value) { case 'AA': echo "value equals 1"; continue; case 'BB': echo "value equals 2"; continue; case 'CC': case 'AA': echo "value equals 3"; break; }