Ограничить значение переменной до определенных предопределенных значений - PullRequest
4 голосов
/ 22 апреля 2011

Какой самый короткий и простой способ сделать это?

Например:

$var = $_GET['something'];
// how to limit the value of $var to "10", "20", "30", "40", 
// and "" for any other input ?

Я имею в виду, есть ли вспомогательная функция php, которая может сделать это, не используя 5 IF?

Ответы [ 5 ]

7 голосов
/ 22 апреля 2011

in_array подходит в этом случае:

if(!in_array($var, array("10", "20", "30", "40"))
{
    // $var will be "" if it does not equal: "10", "20", "30", or "40"
    $var = "";
}
2 голосов
/ 22 апреля 2011

Да, вы можете создать предопределенный массив и затем проверить его:

$array = (10, 20, 30, 40);
if(in_array($array, $var)){
   // validated
} else {
  // invalid
}
1 голос
/ 22 апреля 2011

Не совсем понятно, о чем вы спрашиваете. Есть много альтернатив 5 если. Вы можете использовать математику для ограничения ответов.

$var = (is_numeric($var))?(($var>40 || $var < 10)?"":floor($var/10)*10):"";

Вы можете использовать один оператор switch .

switch($var){
  case "10":
  case "20":
  case "30":
  case "40":
    //do something?
  break;
  default:
    $var = "";
    //do something else?
  break;
}
1 голос
/ 22 апреля 2011

И более нетрадиционный метод:

$map = array(10, 20, 30, 40);   // == range(10, 40, 10);
$map = array_combine($map, $map);

$value = "{$map[$_GET['something']]}";

Преимуществом которого является неявное создание уведомления о нежелательных параметрах (для ведения журнала).

1 голос
/ 22 апреля 2011

лимит или проверка?

if (isset($_GET['something'])) { 
  $validSomethings = array("10", "20", "30", "40");
  foreach ($validSomethings as $something) { 
       if ($something == $_GET['something']) { 
            // it's valid.  do it.
       } else {
            // not valid
       }
    }
 }
...