将数组元素的键赋给变量

时间:2013-02-07 00:42:51

标签: php arrays foreach

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

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

从check_all_fields调用函数field_has_input($ field)($ _ 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;
}

2 个答案:

答案 0 :(得分: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()更复杂,请传递{{1并检查函数内的$key

$_POST[$key]

答案 1 :(得分:0)

如果你想获得一个由$ _POST键组成的值数组,这些键只有一行:

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

  2. array_diff_key会将原始的完整帖子数组与过滤后的版本进行比较,并仅返回已过滤的密钥。

  3. array_keys将使用给定数组的数组键创建值数组

  4. 示例,如果:

    $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"
    }