是否有一个递归遍历数组值的函数?

时间:2010-01-30 08:37:35

标签: php arrays

我有一个数组,其中可能包含一些空值或空值。是否有一个PHP函数,我可以用来遍历这个数组,只是找出是否有值?

例如:

[0]=>
[1]=>
[2]=> test

我想针对存在的值的总数进行测试,如果有的话。 count()不起作用,因为它只是这个数组的一部分,它总是返回1,这是不准确的。

Array
(
    [inputbox] => Array
        (
            [name] => Array
                (
                    [0] => New Text Document.txt  <------- This is what I need to test
                    [1] => 
                )

            [type] => Array
                (
                    [0] => text/plain
                )

            [tmp_name] => Array
                (
                    [0] => /var/tmp/phpLg2rFl
                    [1] => 
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 
                )

            [size] => Array
                (
                    [0] => 0
                    [1] => 
                )
        )
)

1 个答案:

答案 0 :(得分:2)

我不太了解你的问题,但也许你正在寻找 array_filter()

array_filter($arr)将返回一个删除了所有空值的数组,因此在您的情况下,只会保留值为test的索引2,之后您可以使用count()。< / p>


根据你的评论:

if (count(array_filter($arr)) > 0)
{
    echo '$arr has values';
}

请注意,如果您没有为array_filter()提供第二个参数,则可以删除所有可转换为false的值,例如0。如果您只想删除空值,可以执行以下操作:

if (count(array_filter($arr, 'isset')) > 0)
{
    echo '$arr has values';
}

或(我的首选版本):

if (count(array_filter($arr, 'strlen')) > 0)
{
    echo '$arr has values';
}

您可能还对Coalesce function for PHP感兴趣。


根据您的上一次评论,我仍然认为array_filter()有效,(假设$_FILES)请尝试:

if (count(array_filter($_FILES['inputbox']['name'], 'strlen')) > 0)
{
    echo count($_FILES['inputbox']['name']) . ' files';
    echo '<br />';
    echo count(array_filter($_FILES['inputbox']['name'], 'strlen')) . ' files set';
}