Checkeach элемент массива имеет значение - PullRequest
1 голос
/ 20 июля 2010

Я пытаюсь проверить форму с ошибкой, которая при отправке создает массив, однако никакое значение этой ошибки не может быть пустым, как я могу проверить это с помощью PHP, массив выглядит так

Array
(
    [campaign_title] => 
    [campaign_keyword] => 
    [introduction] => 
    [position] => left
    [campaign_headline] => Array
        (
            [0] => 
        )

    [article] => Array
        (
            [0] => 
        )

    [save_multiple] => Save
)

Я знаю, что мне нужно сделать что-то вроде ниже, но с тех пор я полностью потерян,

foreach($post as $k=>$v) {
    //do some loop to check each key as a value?
}

Ответы [ 6 ]

2 голосов
/ 20 июля 2010
foreach($post as $k=>$v) {
    if(is_array($v)) {
        foreach($v as $k1=>$v1) {
            if(empty($v1))
            throw new Exception($k1.' inside '.$k.' is empty');
        }
    }
    if(empty($v))
        throw new Exception($k.' is empty');
}
1 голос
/ 20 июля 2010

Вот еще одно решение. Работает и для многомерных массивов и выдает исключение , когда находит значение empty:

array_walk_recursive($array, function($val, $key) {
    if (empty($val)) {
        throw new Exception(htmlspecialchars($key).' is empty');
    }
});

Требуется PHP5.3 из-за лямбда-обратного вызова .

0 голосов
/ 20 июля 2010

Хорошо, немного неортодоксальное решение

Первая сериализация массива

$serialized_array = serialize($your_array);

Получится вот так

a:6:{s:14:"campaign_title";s:0:"";s:16:"campaign_keyword";s:0:"";s:12:"introduction";s:0:"";s:8:"position";a:1:{i:0;s:0:"";}s:7:"article";a:1:{i:0;s:0:"";}s:13:"save_multiple";s:4:"Save";}

Вы можете считать пустые значения, считая "" .

$number_of_empty_values = substr_count($serialized_array, '""');
0 голосов
/ 20 июля 2010
function check_array($array)
{
    foreach($array as $key => $value)
    {
        if(is_array($value))
        {
            check_array($value);
        }
        if(!isset($value))
        {
            return FALSE;
        }
    }
    return TRUE;
}

использование: check_array($_POST);

0 голосов
/ 20 июля 2010

Следующая функция проверит все значения в массиве, независимо от глубины.Он вернет TRUE, когда найдет пустое значение.В противном случае он вернет FALSE.

function hasEmptyValues(array $array)
{
    foreach(new RecursiveIteratorIterator(
        new RecursiveArrayIterator($array)) as $v) {
            if(empty($v)) return TRUE;
    }
    return FALSE;
}
0 голосов
/ 20 июля 2010

Хотите, чтобы никакое значение не могло быть пустым?

Тогда здесь:

<?php
function checkArrayIsEmpty( $array )
{
    foreach( $array as $k => $v )
    {
        if( is_array( $v ) )
        {
            checkArrayIsEmpty( $v );
        }
        elseif( !is_array( $v ) && empty( trim( $v ) ) )
        {
            return TRUE;
        }
    }
    return FALSE;
}
?>

используйте это как:

<?php
if( checkArrayIsEmpty( $post ) )
{
    echo 'Error!';
}
else
{
    echo '...'; // Its not empty
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...