foreach пустой элемент в массиве - PullRequest
0 голосов
/ 09 сентября 2011

Я получаю некоторые переменные $ _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 ]

1 голос
/ 09 сентября 2011
foreach ($clean as $k => $value) {
    $errors[$k] = empty($value);
}
0 голосов
/ 09 сентября 2011

просто используйте

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

пусто или функции array_filter по умолчанию вернут false для нулевых значений, которые вам могут не понадобиться.

Возвращает FALSE, если var имеет непустое значение иненулевое значение.

Следующие вещи считаются пустыми:

"" (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)
0 голосов
/ 09 сентября 2011

Для того, чтобы выполнить проверку, вам все равно нужно будет использовать foreach для массива $error.

Так что проще сделать проверку так:

foreach ($clean as $key=>$value) {
    if (empty($value)) {
        $error_message .= "$key field is required<br/>";
    }
}
0 голосов
/ 09 сентября 2011

Это должно быть легко с еще одним циклом foreach.

Предполагается, что вы храните массив в $ array.

foreach($array as $key => $value) {
 if($value == NULL){
  $array[$key] = true;
 }else{
  $array[$key] = false;
 }
}
0 голосов
/ 09 сентября 2011

Вы можете использовать несколько функций массива, чтобы получить все ключи элементов, которые имеют ошибку в новом массиве:

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

См. В действии .

0 голосов
/ 09 сентября 2011

Это перебирает ключи вашего чистого массива и загружает массив ошибок, в котором хранится значение true, если они пусты:

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

или если вы не хотите использовать ключи массива:

foreach ( $clean as $key => $value )
    $error[$key] = empty( $value );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...