Checkeach数组项有一个值

时间:2010-07-20 13:05:09

标签: php foreach validation loops

我正在尝试错误检查提交时创建数组的表单,但该错误中的值不能为空,如何使用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 个答案:

答案 0 :(得分:2)

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 :(得分:1)

这是另一种解决方案。也适用于多维数组,并在找到Exception值时抛出empty

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

由于Lambda callback而需要PHP5.3。

答案 2 :(得分:0)

你想要,没有价值可以为空吗?

然后在这里:

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

答案 3 :(得分:0)

以下函数将检查数组中的所有值,无论深度如何。当它找到empty值时,它将返回TRUE。否则它将返回FALSE。

function hasEmptyValues(array $array)
{
    foreach(new RecursiveIteratorIterator(
        new RecursiveArrayIterator($array)) as $v) {
            if(empty($v)) return TRUE;
    }
    return FALSE;
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

好的,有点非正统的解决方案

首先序列化数组

$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, '""');