2014-01-17 22 views
0

今天我有一個有趣的問題。可以說我有表單字段的數組:如何在PHP中生成更長的isset()語句?

array('field1', 'field2', 'field3'); 

我基本上要產生的,如果它檢查所提供的所有字段都聲明存在與否。

因此,像這樣:

function ($array){ 
    $stm = ''; 
    foreach($array as $key){ 
     $stm .= 'isset($_POST['.$key.']) && '; 
    } 
    if (rtrim($stm, ' && ')){ 
     echo 'Fields are exists.'; 

}}

上述功能的問題是,它需要創建的語句作爲字符串,而不是變量,所以它總是exsits。有什麼辦法可以生成這樣的東西,哪種方法可行?

回答

1

你在想這個錯誤的方式。如果我理解正確,你有一組值,也是POST鍵,並且你想檢查是否所有的鍵都被設置了。在這種情況下,我會做一些事情,如:

function isset_multiple($array){ 
    foreach($array as $post_key){ 
     if(!isset($_POST[$post_key])) // if one of them is not set, return false 
      return false; 
    } 
    return true; // none of the foreach loops returned false, so all must be set 
} 
+0

謝謝你的答案男人,是的,我有點累。這是它可以完成的真正方式。 –

0

你可以做的是檢查,如果數組鍵是使用變量名設置,例如

$keyName = "field1"; 

if (isset($_POST[$keyName]) === true) { /* ... */ } 

上面的例子可以在foreach循環來實現。

0

只是執行isset和計數:

function ($array){ 
    $count = 0; 
    foreach($array as $key){ 
    if (isset($_POST[$key]) $count++; 
    else // you can already exit here... 
    } 
    if (count($array) === $count){ 
    echo 'All fields exist.'; 
    } 
} 
0

試試這個..

function arrayHasKeys(array $array, array $keys) 
{ 
    return !((bool) array_diff_key($array, $keys)); 
} 

var_dump(arrayHasKeys($_POST, array('field1', 'field2', 'field3'))); 

它很簡單,可重複使用。在函數內部使用全局變量不是一個好習慣。