2

我有以下代码,在函数 field_has_input() 内,我想将元素的键分配给错误 []

即errors[]=$key而不是errors[]=$field

函数 field_has_input($field) 从 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;
}
4

2 回答 2

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;
  }
}
于 2013-02-07T00:46:52.713 回答
0

如果你想得到一个由空的 $_POST 键组成的值数组,你可以只用一行来做到这一点:

$errors = array_keys( array_diff_key( $_POST, array_filter($_POST) ) );
  1. array_filter将删除 false、null 或空字符串值

  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"
}
于 2013-02-07T01:19:48.627 回答