Например, я должен выполнить несколько наборов инструкций, основанных на значении.
$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 заявления для этой головоломки.
Вам нужно написать свой код следующим образом. Когда мы проверяем несколько условий, мы должны добавить условный оператор.
$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; }