php switch case несколько значений
Php switch case несколько значений
Часто вместо нескольких расположенных подряд инструкций if-else целесообразно воспользоваться специальной конструкцией выбора switch-case. Данная конструкция предназначена для выбора действий, в зависимости от значения указанного выражения. Конструкция switch-case чем-то напоминает конструкцию if-else, который, по сути, является ее аналогом. Конструкцию выбора можно использовать, если предполагаемых вариантов много, например, более 5, и для каждого варианта нужно выполнить специфические действия. В таком случае, использование конструкции if-else становится действительно неудобным.
Синтаксис конструкции switch-case такой:
Принцип работы конструкции switch-case такой:
Приведем примеры использования конструкции switch-case:
php
$ x = 1 ;
// Используем if-else
if ($ x == 0 ) <
echo «x=0
» ;
> elseif ($ x == 1 ) <
echo «x=1
» ;
> elseif ($ x == 2 ) <
echo «x=2
» ;
>
// Используем switch-case
switch ($ x ) <
case 0 :
echo «x=0
» ;
break;
case 1 :
echo «x=1
» ;
break;
case 2 :
echo «x=2
» ;
break;
>
?>
Рассмотренный сценарий выводит x=1 дважды. Еще пример использования конструкции switch-case:
php
$ x = «Яблоко» ;
switch ($ x ) <
case «Яблоко» :
echo «Это Яблоко» ;
break;
case «Груша» :
echo «Это Груша» ;
break;
case «Арбуз» :
echo «Это Арбуз» ;
break;
>
?>
Данный скрипт выводит «Это Яблоко».
Конструкция switch выполняется поэтапно. Сперва никакой код не исполнен. Только, когда конструкция case найдена со значением, которое соответствует значению выражения switch, PHP начинает исполнять конструкции. PHP продолжает исполнять конструкции до конца блока switch, пока не встречается оператор break. Если не использовать конструкции (операторы) break, скрипт будет выглядеть так:
php
$ x = 0 ;
switch ($ x ) <
case 0 :
echo «x=0
» ;
case 1 :
echo «x=1
» ;
case 2 :
echo «x=2
» ;
>
// Без использования break выводит
// x=0
// x=1
// x=2
?>
Операторный список для case может быть также пуст, он просто передает управление в операторный список до следующей конструкции case:
Когда ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан, например:
php
$ x = 3 ;
switch ($ x ) <
case 0 :
echo «x=0» ;
break;
case 1 :
echo «x=1» ;
break;
case 2 :
echo «x=2» ;
break;
default:
echo «x не равен 0, 1 или 2» ;
>
?>
Данный скрипт выводит «x не равен 0, 1 или 2», поскольку переменная $x=3.
Конструкция switch-case также имеет альтернативный синтаксис:
Практический пример использования альтернативного синтаксиса для конструкции switch-case:
php
$ x = 3 ;
switch ($ x ):
case 0 :
echo «x=0» ;
break;
case 1 :
echo «x=1» ;
break;
case 2 :
echo «x=2» ;
break;
default:
echo «x не равен 0, 1 или 2» ;
endswitch;
?>
Как вы уже поняли, данный скрипт выводит «x не равен 0, 1 или 2», так как $x=3.
Работа с конструкциями if-else, switch-case в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Конструкция if-else
Для того, чтобы напрограммировать что-нибудь полезное, одних переменных далеко не достаточно. Нам нужен механизм, который позволит выполнять определенный код в зависимости от каких-либо условий.
То есть нам нужно иметь возможность спросить у PHP ‘Если’.
Например так: если эта переменная меньше нуля, то вывести ‘отрицательно’, иначе (то есть если она больше нуля) вывести ‘положительно’.
В PHP для таких вопросов предназначена конструкция if, которая позволяет выполнять определенный код при выполнении какого-либо условия:
Обратите внимание на то, что блок else не обязателен.
Логическое выражение представляет собой тот самый вопрос, который мы хотим задать PHP. Например, чтобы спросить ‘переменная $a больше нуля’ мы напишем так: $a > 0.
Сокращенный синтаксис
В случае, если в фигурный скобках if или else будет только одно выражение, можно эти фигурные скобки не писать:
Равенство по значению и типу
Для того, чтобы сравнить на равенство следует использовать оператор двойное равно ==, а не одиночное =, как можно было подумать.
Почему так? Потому что одиночное равно зарезервировано за присваиванием. Смотрите пример:
А следующий пример работать будет не так, как мы думаем:
Кроме оператора == существует еще и оператор ===. Их различие в том, что === сравнивает не только по значению, но и по типу, а == сравнивает только по значению.
Чтобы полностью разобраться в этом, внимательно изучите примеры:
Не равно
Все операции сравнения
Возможные операции сравнения, которые можно использовать внутри if:
Функция empty
Зачастую в веб-программировании возникает следующая проблема: необходимо проверить переменную на пустоту.
Переменная будет пустая, если она равна нулю, » (пустой строке), false или null (то есть не определена ранее).
Проверка на пустоту выполняется с помощью функции empty():
Функция isset
Аналогом empty является функция isset. Она проверяет существует ли переменная (то есть то, что она не равна null). Смотрите примеры:
Аналогично проверятся на НЕ существование (через !isset):
Несколько условий сразу: or и and
Иногда может быть нужно составить какое-то сложное условие, например, пользователь вводит месяц своего рождения и вам нужно проверить, что введенное число больше или равно 1 и меньше либо равно 12 (так как в году 12 месяцев).
Для этого существуют операторы and (логическое И) и or (логическое ИЛИ).
Работа с логическими переменными
Многие функции PHP в результате своей работы возвращают либо true (истина), либо false (ложь). Эти значения довольно удобны при своей работе, но новичкам бывает довольно сложно понять их.
Представим себе, что переменная $a равна true. В таком случае конструкцию if можно записать так:
Так как такие сравнения довольно распространены в PHP, то существует специальный прием, облегчающий работу (но не понимание, к сожалению).
Прием такой: конструкцию $a == true можно заменить на более простую: вместо if ($a == true) написать if ($a) и она будет работать аналогично.
Следует пользоваться второй конструкцией, так как она проще.
Также обратите внимание на следующие примеры:
Работа вместе с HTML
Однако, очень часто это может оказаться неудобным, особенно если размеры HTML кода очень большие. Поэтому можно воспользоваться следующим приемом с разрывом PHP:
Вложенные if
Одной конструкцией if здесь не обойтись, нужно использовать две таким образом, чтобы одна была внутри другой:
Конструкция elseif
Недостатком конструкции предыдущего примера является большое количество фигурных скобок. Поэтому была изобретена специальная конструкция elseif (пишется слитно!), которая представляет собой одновременно и else, и начало вложенного if:
Можно использовать несколько elseif, но злоупотреблять этим не стоит (лучше будет воспользоваться конструкцией switch-case, о которой ниже).
Несколько if
Решение: можно было бы воспользоваться вложенными ифами или elseif. Выглядело бы это примерно так:
Для таких случаев существует конструкция switch-case.
Конструкция switch-case
Конструкция switch-case представляет собой альтернативу if-else, ее рекомендуется использовать в случае множественного выбора (например, 10 различных языков, как в нашей задаче).
Изучите ее синтаксис:
Решим нашу задачу с тремя языками с помощью данной конструкции:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
Как в «switch» создать два условия для «case»?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Тысячные числа исправлять к примеру с «1200» на «1 200», «12000» на «12 000» и т.д
Собственно числа исправлять к примеру с «1200» на «1 200», «12000» на «12 000», «120000» на.
Составить программу, которая в строке s заменяет все вхождения » ph » на » f » а все вхождений » ed » на » ing
Составить программу, которая в строке s заменяет все вхождения » ph » на » f » а все вхождений » ed.
Поиск по сайту. Есть ли функция, аналогичная «get_meta_tags», только для «body»?
Простой поиск по сайту. Через glob прохожусь по всем html страничкам сайта, а далее, как я.
Решение
Спасибо.
Возможно ответ очевиден, но почему при замене значения «$search» на отличное от [1,2] (например, [3,2]) скрипт перестает выводить произведение? При этом «array_intersect» по-прежнему работает верно.
Добавлено через 7 минут
Это происходит из-за различных числовых индексов? А как исправить?
Добавлено через 6 минут
Помогла функция «array_values». После реиндексации все заработало!
Добавлено через 1 час 13 минут
В моем случае нельзя предугадать в каком порядке будут расположены значения, а, значит, при нарушении порядка элементов скрипт не работает. Как я выяснил, массив
Тернарный оператор, switch и Элвис? — PHP: Основы
Тернарный оператор
Посмотрите на определение функции, которая возвращает модуль переданного числа:
В PHP существует конструкция, которая по своему действию аналогична конструкции if-else, но при этом является выражением. Она называется тернарный оператор. Тернарный оператор — единственный в своем роде оператор, требующий три операнда:
Общий паттерн выглядит так:
Если вы помните, в чём сила выражений, то вероятно уже догадались, что тернарный оператор можно вкладывать в тернарный оператор. Не делайте этого 🙂 Такой код тяжело и читать, и отлаживать, это очень плохая практика.
Конструкция Switch
Многие языки в дополнение к условной конструкции if включают в себя switch. Это специализированная версия if, созданная для некоторых особых ситуаций. Например, её имеет смысл использовать там, где есть цепочка if else с проверками на равенство. Например:
Свитч довольно сложная конструкция с точки зрения количества элементов из которых она состоит:
Иногда результат полученный внутри case это конец выполнения функции содержащей switch. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.
Первый. Создать переменную перед switch, заполнить ее в case и затем, вконце, вернуть значение этой переменной наружу.
Второй способ проще и короче. Вместо создания переменной, case позволяет внутри себя делать обычный возврат из функции. А так как после return никакой код не выполняется, то мы можем избавиться от break :
Switch хоть и встречается в коде, но технически всегда можно обойтись без него. Ключевая польза при его использовании в том, что он лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. Хотя кода и стало, физически, чуть больше, читать его легче в отличие от блоков elseif.
Оператор Элвис
Вообразим задачу: на сайте у пользователей могут быть имена и псевдонимы. Имя не обязательно, но если оно есть, то нужно обращаться к человеку по имени, а если нет, то по псевдониму. Попробуем собрать строку с приветствием человека по этим требованиям:
?: — бинарный оператор, который возвращает первый операнд если он истинен, и второй в ином случае.
How to use a switch case ‘or’ in PHP
Is there a way of using an ‘OR’ operator or equivalent in a PHP switch?
For example, something like this:
13 Answers 13
This is called «falling through» the case block. The term exists in most languages implementing a switch statement.
If you must use || with switch then you can try :
If not your preferred solution would have been
I won’t repost the other answers because they’re all correct, but I’ll just add that you can’t use switch for more «complicated» statements, eg: to test if a value is «greater than 3», «between 4 and 6», etc. If you need to do something like that, stick to using if statements, or if there’s a particularly strong need for switch then it’s possible to use it back to front:
but as I said, I’d personally use an if statement there.
Try with these following examples in this article : http://phpswitch.com/
Possible Switch Cases :
(i). A simple switch statement
The switch statement is wondrous and magic. It’s a piece of the language that allows you to select between different options for a value, and run different pieces of code depending on which value is set.
Each possible option is given by a case in the switch statement.
Example :
(ii). Delimiting code blocks
The major caveat of switch is that each case will run on into the next one, unless you stop it with break. If the simple case above is extended to cover case 5:
Example :
(iii). Using fallthrough for multiple cases
Because switch will keep running code until it finds a break, it’s easy enough to take the concept of fallthrough and run the same code for more than one case:
Example :
(iv). Advanced switching: Condition cases
PHP’s switch doesn’t just allow you to switch on the value of a particular variable: you can use any expression as one of the cases, as long as it gives a value for the case to use. As an example, here’s a simple validator written using switch:
Example :
i think this may help you to resolve your problem.