Поэтому у меня есть четыре условия, которые мне нужно пройти, и я подумал, что лучше всего использовать оператор 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; }
Мы либо разрешаем значение $ без изменений, либо отрицаем значение в соответствии с условием. Значение $ всегда будет соответствовать самому себе или пропустить тест против его отрицания.