2013-02-07 18 views
2

我有下面的代碼段和內部功能field_has_input(),我想元素的鍵分配給誤差[]分配鍵的可變

即錯誤[] = $鍵,而不是錯誤[] = $場

功能field_has_input($場)獲取check_all_fields稱爲($ _ POST)

希望有人可以幫忙。

function field_has_input($field) 
{ 
    global $errors; 

    if(!isset($field) || empty($field)) 
    { 
     $errors[]=$field; 
    } 

}

function check_all_fields($_POST) 
{ 
    global $errors; 
    foreach($_POST as $key => $value) 
    { 
     echo $_POST[$key] . "<br />"; 
     field_has_input($_POST[$key]); 

    } 
    //exit; 
    var_dump($errors); 
    return $errors; 
} 
+0

這是目前正在傳遞到鍵值你' field_has_input'函數。然而,該函數永遠不會向'$ errors'數組中添加任何內容,因爲它只是調用了實際存在於'$ _POST'中的鍵。我不確定你在這裏試圖做什麼。 –

+0

@MikeBrant - 你的意思是說isset和空只檢查變量或鍵而不是值?而在目前的情況下,他們碰巧正在檢查一個值,所以它不會工作?只是試圖確認我是否正確理解了你... – user481913

回答

1

我建議你用field_has_input()功能完全免除,只是做其他循環內的工作。否則,您需要將$key傳遞給內部函數。目前的簡單性完全沒有必要,並且增加了複雜性。

function check_all_fields($_POST) 
{ 
    global $errors; 
    foreach($_POST as $key => $value) 
    { 
     // empty() calls isset() implicitly... 
     if (empty($value)) { 
      $errors[] = $key; 
     } 
    } 
    //exit; 
    var_dump($errors); 
    return $errors; 
} 

此外,我建議不使用global錯誤,而是將它傳遞給函數。因爲$_POST是超全局的,所以不需要將它作爲參數傳遞給您的函數。改爲只通過$errors

function check_all_fields($errors) { 
    // $_POST is already available here... 
    foreach($_POST as $key => $value) 
    { 
    if (empty($value)) { 
     $errors[] = $key; 
    } 
    } 
    return $errors; 
} 

如果必須使用內部函數,比如如果在field_has_input()要做的實際工作不僅僅是檢查empty()比較複雜,通過$key和檢查$_POST[$key]在函數內部

function field_has_input($key, $errors) { 
    if (empty($_POST[$key])) { 
    $errors[] = $key; 
    } 
} 
+0

「我建議你完全免費使用field_has_input()函數」但是你的示例代碼仍然從其他函數內部調用它?我想我喜歡你的方法(第三段代碼)傳遞$ key,然後檢查$ _POST [$ key] ...但是,你能否澄清前兩個例子......也許這是我可以學習的另一個應用程序方法。 .. – user481913

+0

@ user481913複製/粘貼失敗...抱歉修復。 –

+0

+1感謝所有不同的方法,並指出了一個更好的方法來做到這一點...我嘗試了兩種方法,並希望如果我有任何其他的澄清,你可以幫助我與他們以及... – user481913

0

如果要獲取由空白的$ _POST鍵組成的數組數組,您可以只用一行來完成:

$errors = array_keys(array_diff_key($_POST, array_filter($_POST))); 
  1. array_filter將刪除假,空或空字符串值

  2. array_diff_key將比較原始的全文後陣列的濾波的版本,並只返回被過濾的關鍵。

  3. array_keys將使用給定的數組

例中的數組鍵創建值的數組,如果:

$arr = array (
    'name'  => 'Bob' 
    ,'company' => '' 
    ,'state' => 'CA' 
    ,'phone' => '' 
); 

$errors = array_keys(array_diff_key($arr, array_filter($arr))); 
var_dump($errors); 

// output: 
array(2) { 
    [0]=> 
    string(7) "company" 
    [1]=> 
    string(5) "phone" 
}