Php switch в цикле

switch

Оператор switch подобен серии операторов IF с одинаковым условием. Во многих случаях вам может понадобиться сравнивать одну и ту же переменную (или выражение) с множеством различных значений, и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная (или выражение). Это именно тот случай, для которого удобен оператор switch.

Замечание: Обратите внимание, что в отличие от некоторых других языков, оператор continue применяется в конструкциях switch и действует подобно оператору break. Если у вас конструкция switch находится внутри цикла, и вам необходимо перейти к следующей итерации цикла, используйте continue 2.

Следующие два примера иллюстрируют два различных способа написать то же самое. Один использует серию операторов if и elseif, а другой — оператор switch:

Пример #1 Оператор switch
if ($i == 0) < echo "i равно 0"; >elseif ($i == 1) < echo "i равно 1"; >elseif ($i == 2) < echo "i равно 2"; >switch ($i)
Пример #2 Оператор switch допускает сравнение со строками

Важно понять, как оператор switch выполняется, чтобы избежать ошибок. Оператор switch исполняет строчка за строчкой (на самом деле выражение за выражением). В начале никакой код не исполняется. Только в случае нахождения оператора case, значение которого совпадает со значением выражения в операторе switch, PHP начинает исполнять операторы. PHP продолжает исполнять операторы до конца блока switch либо до тех пор, пока не встретит оператор break. Если вы не напишете оператор break в конце секции case, PHP будет продолжать исполнять команды следующей секции case. Например :

Читайте также:  nth-child

В этом примере, если $i равно 0, то PHP исполнит все операторы echo! Если $i равно 1, PHP исполнит два последних оператора echo. Вы получите ожидаемое поведение оператора (‘i равно 2’ будет отображено) только, если $i будет равно 2. Таким образом, важно не забывать об операторах break (даже если вы, возможно, хотите избежать его использования по назначению при определенных обстоятельствах).

В операторе switch выражение вычисляется один раз и этот результат сравнивается с каждым оператором case. В выражении elseif, выражение вычисляется снова. Если ваше условие более сложное, чем простое сравнение и/или находится в цикле, конструкция switch может работать быстрее.

Список операторов для исполнения в секции case также может быть пустым, что просто передает управление списку операторов в следующей секции case.

Специальный вид конструкции case — default. Сюда управление попадает тогда, когда не сработал ни один из других операторов case. Например:

Выражением в операторе case может быть любое выражение, которое приводится в простой тип, то есть в тип integer, или в тип с плавающей точкой (float), или строку. Массивы или объекты не могут быть здесь использованы до тех пор, пока они не будут разыменованы до простого типа.

Возможен альтернативный синтаксис для управляющей структуры switch. Для более детальной информации, см. Альтернативный синтаксис для управляющих структур.

switch ($i): case 0: echo "i равно 0"; break; case 1: echo "i равно 1"; break; case 2: echo "i равно 2"; break; default: echo "i не равно to 0, 1 или 2"; endswitch;

Возможно использование точки с запятой вместо двоеточия после оператора case. К примеру :

Источник

Цикл foreach
Операторы switch, case

Конструкция foreach (php.net) — предоставляет простой способ перебора массивов . Цикл foreach специально сделан для для того, чтобы переберать элементы массива одного за другим. Не важно какие ключи у массива: числовые, строковые (нумерованные массивы или ассоциативные), не важно, идут-ли числовые ключи по порядку или с разрывами — для цикла foreach ни какой роли это не играет. Он просто берет массив и переберает один элемент за другим до самого конца массива. Это цикл специально создавался для массивов, то есть проводить с ним теже самые операции, что и с циклами while и for , не получиться и php выдаст ошибку при попытке использования с переменными других типов или неинициализированными переменными.

Существует два вида синтаксиса :

Первый цикл перебирает массив, задаваемый с помощью переменной $array . На каждой итерации значение текущего элемента присваивается переменной $value и внутренний указатель массива увеличивается на единицу:

foreach ( $array as $value )
<
Тело цикла
>

Второй цикл дополнительно присвоит ключ текущего элемента переменной $key на каждой итерации:

foreach ( $array as $key => $value )
<
Тело цикла
>

Первый вариант синтаксиса foreach

$arr = [ ‘Ivanov’ , ‘Petrov’ , ‘Sidorov’ ];
$arr [ 5 ] = ‘Pupkin’ ; // добавит в массив $arr ‘Pupkin’ c ключем 5
$arr [] = ‘Vaskin’ ; // добавит в конец массива ‘Vaskin’ c ключем 6
print_r ( $arr );

print_r($arr) выведет:
Array ( [0] => Ivanov [1] => Petrov [2] => Sidorov [5] => Pupkin [6] => Vaskin )

echo $item выведет:
Ivanov
Petrov
Sidorov
Pupkin
Vaskin

— где $arr — название массива,

$item — временная переменная.

То есть, мы проходимся по массиву $arr , берем каждый его конкретный элемент как,

и далее мы указываем в какую временную переменную мы его поместим. На каждой итерации

цикла в переменную $item попадает каждый конкретный элемент массива.

Пример со строковыми ключами:

$names = [
‘Ivan’ => ‘Ivanov’ ,
‘Petr’ => ‘Petrov’ ,
‘Sidor’ => ‘Sidorov’ ,
];
foreach ( $names as $name ) <
echo $name . ‘
‘ ;
>
?>
выведет:
Ivanov
Petrov
Sidorov

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

Второй вариант синтаксиса foreach

foreach ( $names as $key => $name ) echo «Name: $key , Surname: $name
» ;
>
?>
выведет:
Name: Ivan, Surname: Ivanov
Name: Petr, Surname: Petrov
Name: Sidor, Surname: Sidorov

— здесь на каждой итерации цикла в переменную $name , как и прежде, попадает значение каждого конкретного элемент массива, а в переменную $key попадет ключ.

foreach ( $arr as $k => $v ) <
echo «Key: $k , Sname: $v
» ;
>
?>
выведет:
Key: 0, Sname: Ivanov
Key: 1, Sname: Petrov
Key: 2, Sname: Sidorov
Key: 5, Sname: Pupkin
Key: 6, Sname: Vaskin

Операторы switch, case

Оператор switch — это по сути тоже самое условие, которое часто применяется в том случае, когда нам нужно перебрать множество различных вариантов условия.

Работа оператора switch похожа на работу конструкции if — elseif — else . Он выполняет ту же функцию, но позволяет немного упростить код, сделать его более понятным.

Для наглядности сравним работу эти конструкций.

Пример работы конструкции if — elseif — else :

$var = 3 ;
if ( $var == 1 ) echo ‘Variable = 1’ ;
> elseif ( $var == 2 ) echo ‘Variable = 2’ ;
> elseif ( $var == 3 ) echo ‘Variable = 3’ ;
> else echo ‘Something else. ‘ ;
>
// выведет: Variable = 3
?>

Пример работы оператора switch :

$var = 3 ;
switch ( $var ) case 1 :
echo ‘Variable = 1’ ;
break ;
case 2 :
echo ‘Variable = 2’ ;
break ;
case 3 :
echo ‘Variable = 3’ ;
break ;
default :
echo ‘Something else. ‘ ;
>
// выведет: Variable = 3
?>

— где $var — переменная, которую мы будем проверять;

— внутри операторных скобок, с помощью оператора case (кейс), мы задаем значение с которым мы сравниваем нашу переменную $var ;

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

условие выполняется (в нашем случае, если $var = 3 );

— после этого используем оператор break — для того, чтобы не срабатывали последующие кейсы;

— в конце кода записываем оператор default (по умолчанию) — это аналог else .

Источник

Php switch в цикле

Оператор switch похож на ряд операторов IF с одинаковым условием. Во многих случаях вам может понадобиться сравнивать одну и ту же переменную (или выражение) с множеством различных значений и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная (или выражение). Это именно тот случай, для которого удобен оператор switch .

Замечание: Обратите внимание, что в отличие от некоторых других языков, оператор continue применяется в конструкциях switch и действует подобно оператору break . Если у вас конструкция switch находится внутри цикла, и вам необходимо перейти к следующей итерации цикла, используйте continue 2 .

Замечание:

Заметьте, что конструкция switch/case использует нестрогое сравнение (==).

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

Пример #1 Оператор switch

switch ( $i ) case 0 :
echo «i равно 0» ;
break;
case 1 :
echo «i равно 1» ;
break;
case 2 :
echo «i равно 2» ;
break;
>

if ( $i == 0 ) echo «i равно 0» ;
> elseif ( $i == 1 ) echo «i равно 1» ;
> elseif ( $i == 2 ) echo «i равно 2» ;
>
?>

Пример #2 Оператор switch допускает сравнение с типом string

switch ( $i ) case «яблоко» :
echo «i это яблоко» ;
break;
case «шоколадка» :
echo «i это шоколадка» ;
break;
case «пирог» :
echo «i это пирог» ;
break;
>
?>

Важно понять, как оператор switch выполняется, чтобы избежать ошибок. Оператор switch исполняет строчка за строчкой (на самом деле выражение за выражением). В начале никакой код не исполняется. Только в случае нахождения оператора case , значение которого совпадает со значением выражения в операторе switch , PHP начинает исполнять операторы. PHP продолжает исполнять операторы до конца блока switch либо до тех пор, пока не встретит оператор break . Если вы не напишете оператор break в конце секции case, PHP будет продолжать исполнять команды следующей секции case. Например :

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 также может быть пустым, что просто передаёт управление списку операторов в следующей секции case.

switch ( $i ) case 0 :
case 1 :
case 2 :
echo «i меньше чем 3, но неотрицательный» ;
break;
case 3 :
echo «i равно 3» ;
>
?>

Специальный вид конструкции case — default . Сюда управление попадает тогда, когда не сработал ни один из других операторов case. Например:

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» ;
>
?>

Замечание: Несколько указаний default вызовут ошибку E_COMPILE_ERROR .

Замечание: Формально конструкция default может быть перечислена в любом месте. Она будет использоваться только в том случае, если ни один другой вариант не подходит. Однако, по соглашению, лучше всего поместить её в конец, как последнюю конструкцию.

Если ни одна конструкция case не совпадает и нет конструкции default , то код не будет выполнен, как если бы ни одно утверждение if не было истинным.

Значение case может быть задано в виде выражения. Однако это выражение будет оценено само по себе, а затем слабо сопоставлено со значением switch. Это означает, что его нельзя использовать для сложных оценок значения switch. Например:

switch ( $target ) case $start — 1 :
print «A» ;
break;
case $start — 2 :
print «B» ;
break;
case $start — 3 :
print «C» ;
break;
case $start — 4 :
print «D» ;
break;
>

Для более сложных сравнений в качестве значения switch может использоваться значение true . Или, как вариант, вместо switch использовать блоки if — else .

switch ( true ) case $start — $offset === 1 :
print «A» ;
break;
case $start — $offset === 2 :
print «B» ;
break;
case $start — $offset === 3 :
print «C» ;
break;
case $start — $offset === 4 :
print «D» ;
break;
>

Возможен альтернативный синтаксис для управляющей структуры switch. Для более детальной информации, смотрите Альтернативный синтаксис для управляющих структур.

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. К примеру :

switch( $beer )
case ‘tuborg’ ;
case ‘carlsberg’ ;
case ‘stella’ ;
case ‘heineken’ ;
echo ‘Хороший выбор’ ;
break;
default;
echo ‘Пожалуйста, сделайте новый выбор. ‘ ;
break;
>
?>

Источник

Оцените статью