foreach其他数组中的数组集元素中的空元素

时间:2011-09-09 11:57:29

标签: php arrays post foreach

我正在获取一些$ _POST变量并将它们放在一个数组中,如下所示:

foreach (array_keys($_POST) as $key) {
    $clean[$key] = mysql_real_escape_string($_POST[$key]);
}

结果是这样的数组:

Array
(
    [pers_anrede] => Frau
    [pers_titel] => Dr.
    [pers_vorname] => BLa
    [pers_nachname] => blablabla
    [pers_vorwahl] => 0123
    [pers_telefon] => 3456789
    [job_bundesland] => Berlin
    [job_plz] => 
    [job_ort] => 
    [job_str] => 
)

现在,我想做的是某种形式的简单验证。如果上面数组的元素具有任何值,则其错误设置为false。如果缺少元素的值,则将其错误设置为true。我想得到一个这样的数组(保留上面的示例数据,只有最后三个元素会产生错误:

Array
(
    [pers_anrede] => false
    [pers_titel] => false
    [pers_vorname] => false
    [pers_nachname] => false
    [pers_vorwahl] => false
    [pers_telefon] => false
    [job_bundesland] => false
    [job_plz] => true
    [job_ort] => true
    [job_str] => true
)

使用这个数组我希望能够做这样的事情等等:

if $error['pers_anrede'] == true {
      $error_message = 'please correct blabla';
}

感谢帮忙

6 个答案:

答案 0 :(得分:1)

foreach ($clean as $k => $value) {
    $errors[$k] = empty($value);
}

答案 1 :(得分:0)

您可以使用几个数组函数来获取新数组中出错的项的所有键:

$data = array(
    'pers_anrede' => 'Frau',
    'pers_titel' => null,
    'pers_vorname' => 'BLa',
);

$filtered = array_filter($data);
$error = array_combine(array_keys(array_diff_key($data, $filtered)),
                       array(true));

然后:

if(isset($error['pers_titel'])) {
    // blah
}

<强> See it in action

答案 2 :(得分:0)

再过一次foreach循环应该很容易。

假设您将数组存储在$ array中。

foreach($array as $key => $value) {
 if($value == NULL){
  $array[$key] = true;
 }else{
  $array[$key] = false;
 }
}

答案 3 :(得分:0)

为了进行验证,您仍需要预约$error数组。

因此,更简单地进行这样的验证:

foreach ($clean as $key=>$value) {
    if (empty($value)) {
        $error_message .= "$key field is required<br/>";
    }
}

答案 4 :(得分:0)

只需使用

foreach ($clean as $k => $value) {
    $validate[$k] = ($value == "")?true:false;
}

空或默认的array_filter函数将为您可能不需要的零值返回false。

  

如果var具有非空和非零值,则返回FALSE。

     

以下内容被认为是空的:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

答案 5 :(得分:-1)

这将循环遍历clean数组的键并加载一个错误数组,如果它们为空则存储为true:

foreach ( array_keys( $clean ) as $key )
    $error[$key] = empty( $clean[$key] );

或者如果您不想使用数组键:

foreach ( $clean as $key => $value )
    $error[$key] = empty( $value );