2

次のコードがあり、関数 field_has_input() 内で、要素のキーをエラーに割り当てたい[]

つまり、errors[]=$field の代わりに errors[]=$key

関数 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()チェックするだけよりも複雑な場合は、関数内でおよび checkempty()を渡します。$key$_POST[$key]

function field_has_input($key, $errors) {
  if (empty($_POST[$key])) {
    $errors[] = $key;
  }
}
于 2013-02-07T00:46:52.713 に答える
0

空の $_POST キーで構成される値の配列を取得したい場合は、たった 1 行で実行できます。

$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 に答える