Есть ли способ использования оператора «ИЛИ» или его эквивалента в переключателе PHP?
Например, примерно так:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}






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.
да, у вас должна быть достаточно веская причина, чтобы выбрать этот стиль, но хорошо знать, что это возможно.
Я действительно рад узнать это. Каждый раз, когда я создаю проект на языке Basic-y, мне не хватает switch() в стиле C, а когда я работаю на языке C-ish, мне очень не хватает Select Case, что на самом деле является сокращенным способом сказать «есть большой блок if, else if, else-if ... here ".
you can't use switch for more "complicated" statements это can't или это shouldn't? потому что в вашем примере вы can
@Sharky он имел в виду, что обычный вариант использования переключателя не может. Такой тип switch (true) не является обычным вариантом использования коммутатора.
Лучшим способом могло бы быть иначе с запросом. Кроме того, это может быть проще и понятнее в использовании.
Пример:
<?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)?
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 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.
Рад видеть, что вы рекомендовали if () вместо switch () в этом случае. Такой переключатель просто добавляет сложности, ИМО.