2008-10-16 10 views

ответ

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

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

13

Попробуйте

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

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

+1

Рад видеть, что вы рекомендовали if() over switch() в этом случае. Этот тип коммутатора просто добавляет сложности, ИМО. – moo 2008-10-16 02:08:01

+1

Да, у вас должна быть достаточно веская причина выбирать этот стиль, но хорошо знать, что это возможно. – nickf 2008-10-16 02:14:52

+2

Я действительно рад узнать об этом.Каждый раз, когда я создаю проект на языке Basic-y, мне не хватает C-style `switch()`, и когда я работаю на языке C-ish, мне очень не хватает «Select Case», что на самом деле сокращенный способ сказать «есть большой блок, если, иначе, если, иначе, если ... здесь». – 2010-10-09 07:50:01

-2

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

Пример:

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

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

97

Если вы должны использовать || с 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; 
} 
1

использовать этот код:

switch($a) { 
case 1: 
case 2: 
    ....... 
    ....... 
    ....... 
    break; 
} 

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

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

Я предлагаю вам пройти через http://php.net/manual/en/control-structures.switch.php (ручной)

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

объяснения

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

33

Try с этими примерами, в этой статье: http://phpswitch.com/

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

(я). Простая заявка на включение

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

Каждая возможная опция задается случаем в инструкции переключателя.

Пример:

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

(II). , ограничивающей блоки кода

Основной нюанс переключателя является то, что каждый случай будет работать на в следующем, если вы не остановите его с перерывом. Если простой случай выше распространен на случай 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). Advanced переключения: случаи Состояние

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

Пример:

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; 
} 

я думаю, что это может помочь вам решить вашу проблему.