Intereting Posts
Кэш лака не кэширует PHP с сеансами Если бэкэнд не изменился TTL Как я могу получить возвращаемое регистром возвращение из array_intersect () PHP конвертирует CSV в конкретный формат JSON Получите изображение mimetype из ресурса в PHP / GD? Что произойдет, когда location.href будет изменен до завершения запроса ajax? Получите ошибку при использовании skyscanner Api из расчета полет в php Получить индекс элемента в массиве по значению CodeIgniter: как передавать значения из определенной функции в другую Перенаправление, когда поисковый запрос является точным заголовком в WordPress jQuery .submit () загрузить ответ отображения формы, возвращенный Slim PHP Изображения DOMPDF не отображаются на новом сервере Как настроить код для функционального тестирования с помощью Symfony2? Возможно ли перемотать результат PDO? Как изменить поиск в WordPress, чтобы он запрашивал термины таксономии и термины категории? Запуск процесса в фоновом режиме на висит PHP-страница

Использование операторов сравнения в PHP-переключателе

Поэтому у меня есть четыре условия, которые мне нужно пройти, и я подумал, что лучше всего использовать оператор switch в PHP. Тем не менее, мне нужно проверить, является ли целое число, скажем, меньше или равно, или больше и равно.

 switch ($count) { case 20: $priority = 'low'; break; case 40: $priority = 'medium'; break; case 60: $priority = 'high'; break; case 80: $priority = 'severe'; break; } 

С помощью оператора if() он будет выглядеть следующим образом:

 if ($count <= 20) { $priority = 'low'; } if ($count <= 40) { $priority = 'medium'; } 

Возможно ли это в switch-case ?

Более общий случай для решения этой проблемы:

 switch (true) { case $count <= 20: $priority = 'low'; break; case $count <= 40: $priority = 'medium'; break; case $count <= 60: $priority = 'high'; break; default: $priority = 'severe'; break; } 

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

 if (x == 'a') { ... } else if (x == 'b') { ... } else if (x == 'c') { ... } 

код. Невозможно изменить switch() от == до < или любого другого оператора сравнения. Это строго для проверки равенства.

Коммутаторы не могут этого сделать, но в этом конкретном случае вы можете сделать что-то вроде этого:

 switch ((int)(($count - 1) / 20)) { case 0: $priority = 'low'; break; case 1: $priority = 'medium'; break; case 2: $priority = 'high'; break; case 3: $priority = 'severe'; break; } 

Таким образом, в (int)(($count - 1) / 20) все значения от 0 до 20 будут вычисляться до 0, от 21 до 40 будут отображаться до 1 и т. Д., Что позволит вам использовать оператор switch для этой цели.

И поскольку мы объединяем значения, мы можем даже упростить массив:

 $priorities = ['low', 'medium', 'high', 'severe']; $priority = $priorities[(int)(($count - 1) / 20)]; 

Существует способ, который работает в php 7 с использованием операторов тройного назначения. Оператор был введен ранее (5.4?), Но я никогда не тестировал код в других версиях. Я написал весь код коммутатора там , однако для краткости здесь есть только конкретное предложение. Предположим, мы хотим, чтобы условие соответствовало всем числам, большим или равным пяти:

 switch($value){ case ($value >= 5?$value:!$value)://do something here break; } 

Мы либо разрешаем значение $ без изменений, либо отрицаем значение в соответствии с условием. Значение $ всегда будет соответствовать самому себе или пропустить тест против его отрицания.