Контролни структури
PHP Manual

switch

Kонструкцията switch (пренасочвам) наподобява поредица от конструкции IF върху един и същи израз. В много случаи, ще искате да сравните една и съща променлива (или израз) с много различни стойности и да изпълните различно парче код, в зависимост от това на коя стойност отговаря. Точно за това служи конструкцията switch.

Забележка: Забележете, че за разлика от някои други езици, инструкцията continue важи за switch и работи подобно на break. Ако имате switch вътре в цикъл и искате да продължите със следващата итерация на външния цикъл, използвайте continue 2.

Забележка: Забележете, че switch/case извършва свободно сравнение.

Следващите два примера представляват два различни начина да напишете едно и също нещо, едното чрез изполване на поредица от инструкции if и elseif, а другото - с конструкция switch:

Example #1 Структура switch

<?php
if ($i == 0) {
    echo 
"i е равно на 0";
} elseif (
$i == 1) {
    echo 
"i е равно на 1";
} elseif (
$i == 2) {
    echo 
"i е равно на 2";
}

switch (
$i) {
    case 
0:
        echo 
"i е равно на 0";
        break;
    case 
1:
        echo 
"i е равно на 1";
        break;
    case 
2:
        echo 
"i е равно на 2";
        break;
}
?>

Example #2 Структурата switch работи и с низове

<?php
switch ($i) {
    case 
"ябълка":
        echo 
"i е ябълка";
        break;
    case 
"круша":
        echo 
"i е круша";
        break;
    case 
"кекс":
        echo 
"i е кекс";
        break;
}
?>

За да се избегнат грешки, е важно да се разбере как се изпълнява конструкцията switch. Тя се изпълнява ред по ред (всъщност, инструкция по инструкция). В началото не се изпълнява никакъв код. Чак когато се срещне инструкцията case (случай) със стойност, която да съвпада със стойността на израза switch, PHP започва да изпълнява инструкциите. PHP продължава да ги изпълнява докато не достигне края на switch блока, или до първия път, където види инструкция break. Ако не напишете инструкция break накрая на списъка с инструкции за текущия случай (case), PHP ще продължи с изпълнението на инструкциите в следващия случай. Например:

<?php
switch ($i) {
case 
0:
    echo 
"i е равно на 0";
case 
1:
    echo 
"i е равно на 1";
case 
2:
    echo 
"i е равно на 2";
}
?>

В случая, ако променливата $i е равна на 0, PHP ще изпълни всички инструкции echo! Ако $i е равна на 1, PHP ще изпълни последните две инструкции echo. Ще получите очакваното поведение (ще се изведе 'i е равно на 2') само ако $i е равна на 2. Следователно, е важно да не забравяте изразите break (дори и в случай, че искате да ги пропуснете умишлено при определени обстоятелства).

В конструкция switch условието се изчислява само веднъж и резултатът се сравнява с всяка клауза case. При elseif - условието се изчислява повторно. Ако условието ви е по-сложно от просто сравняване и/или е в тежък цикъл, switch ще бъде по-бърза.

Списъкът с инструкции за даден случай (case) може да бъде и празен, което просто предава управлението на списъка с инструкции в следващия случай.

<?php
switch ($i) {
  case 
0:
  case 
1:
  case 
2:
      echo 
"i е по-малко от 3, но е неотрицателно";
      break;
  case 
3:
      echo 
"i е 3";
}
?>

Специален случай е случая default. Този случай съвпада с всичко, което не е било намерено от другите случаи. Например:

<?php
switch ($i) {
  case 
0:
      echo 
"i е равно на 0";
      break;
  case 
1:
      echo 
"i е равно на 1";
      break;
  case 
2:
      echo 
"i е равно на 2";
      break;
  default:
      echo 
"i не е равно нито на 0, нито на 1, нито на 2";
}
?>

Инструкцията case може да бъде всякакъв израз, който се изчислява до прост тип, т.е. цели числа, числа с плаваща запетая или низове. Масиви и обекти не могат да бъдат използвани в този случай, освен ако не се преобразуват до прост тип.

Алтернативният синтаксис за контролни структури се поддържа от switch. За повече информация погледнете Алтернативен синтаксис за контролни структури .

<?php
switch ($i):
    case 
0:
        echo 
"i е равно на 0";
        break;
    case 
1:
        echo 
"i е равно на 1";
        break;
    case 
2:
        echo 
"i е равно на 2";
        break;
    default:
        echo 
"i не е равно нито на 0, нито на 1, нито на 2";
endswitch;
?>

Възможно е да използвате точка и запетая вместо двоеточие след case така:

<?php
switch($beer)
{
    case 
'загорка';
    case 
'каменица';
    case 
'шуменско';
        echo 
'Добър избор';
    break;
    default;
        echo 
'Моля изберете отново...';
    break;
}
?>


Контролни структури
PHP Manual