繁体   English   中英

将数组元素的键分配给变量

[英]Assign key of an array element to a variable

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

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

从check_all_fields($ _ POST)调用函数field_has_input($ field)

希望有人可以帮忙。

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

我建议您完全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;
  }
}

如果要获取由$ _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"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM