PHP: проблема с переключателем с диапазоном

Я хотел бы различать следующие случаи в PHP, используя оператор switch. Может ли кто-нибудь здесь помочь и рассказать, как мне изменить это, чтобы он работал с числовыми диапазонами (целыми числами)?

  • $ myVar ‹0
  • $ myVar ‹10
  • $ myVar ‹20
  • $ myVar ‹30
  • $ myVar ‹999
  • дефолт

На данный момент у меня есть следующее, но я предполагаю, что его нужно изменить из-за диапазонов:

switch($myVar)
{
    case(<0):
        // do stuff
        break;
    case(<10):
        // do stuff
        break;
    case(<20):
        // do stuff
        break;
    case(<30):
        // do stuff
        break;
    case(<999):
        // do stuff
        break;
    default:
        // do stuff
        break;
}

Большое спасибо за любую помощь с этим, Тим


person user2571510    schedule 11.02.2014    source источник
comment
Вот метод stackoverflow.com/a/8876696/46675   -  person Mike B    schedule 12.02.2014
comment
php.net/manual/en/control-structures.switch. php # 88643   -  person Paul Dessert    schedule 12.02.2014


Ответы (2)


Сделать это можно так:

$myVar = 50;
switch (true) {
    case($myVar < 0):
        // do stuff
        break;
    case($myVar < 10):
        // do stuff
        break;
    case($myVar < 20):
        // do stuff
        break;
    case($myVar < 30):
        // do stuff
        break;
    case($myVar < 999):
        // do stuff
        break;
    default:
        // do stuff
        break;
}

В комментариях к руководству.

person Bjoern    schedule 11.02.2014
comment
Спасибо за это - отлично! - person user2571510; 12.02.2014
comment
Еще один вопрос по этому поводу: будет ли это работать так же и в JavaScript? - person user2571510; 12.02.2014
comment
Посмотрите этот SO-ответ: stackoverflow.com/questions/17145723/ Здесь вы найдете хороший источник для этого дополнительного вопроса. - person Bjoern; 12.02.2014

Используйте in_array($myVar,range(100,200)), чтобы проверить, существует ли значение в диапазоне.

$myVar = 50;
switch (true) {
    case(in_array($myVar,range(0,10))):
        // do stuff
        break;
    case(in_array($myVar,range(20,30))):
        // do stuff
        break;
    case(in_array($myVar,range(30,900))):
        // do stuff
        break;

    default:
        // do stuff
        break;
}
person Nambi    schedule 11.02.2014