2011-04-21 73 views
4

這樣做的最簡單方法是什麼?將變量值限制爲某些預定義的值

例如:

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

我的意思是有一個PHP輔助函數可以做到這一點,而不必使用5倍的IF?

回答

7

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 = ""; 
} 
+0

你打我秒!哈哈......做得很好。 – 2011-04-21 20:04:15

+0

謝謝,我用過:'$ var = in_array($ _ GET [「something」],array(10,20,30,40))? $ _GET [「something」]:'';'它更短:D – Alex 2011-04-21 20:12:38

+0

是的。這是最好的選擇。你應該檢查它的正確答案。蒂姆做得好! – 2011-04-21 20:25:57

2

是的,你可以建立一個預定義的數組,然後驗證反對:

$array = (10, 20, 30, 40); 
if(in_array($array, $var)){ 
    // validated 
} else { 
    // invalid 
} 
1

限制或檢查?

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 
     } 
    } 
} 
1

和更非常規的方法,包括:

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

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

其具有隱式地產生中不需要的參數的通知(用於記錄)的優點。

1

這並不完全清楚你在問什麼。 5個ifs有很多選擇。 您可以使用數學來限制響應。

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

您可以使用單個switch statement

switch($var){ 
    case "10": 
    case "20": 
    case "30": 
    case "40": 
    //do something? 
    break; 
    default: 
    $var = ""; 
    //do something else? 
    break; 
}