Есть ли функция, которая будет рекурсивно обходить значения массива? - PullRequest
3 голосов
/ 30 января 2010

У меня есть массив, в котором могут быть нулевые или пустые значения. Есть ли функция 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 Ответ

2 голосов
/ 30 января 2010

Я не очень хорошо понимаю ваш вопрос, но, возможно, вы ищете array_filter()?

array_filter($arr) вернет массив со всеми удаленными пустыми значениями, поэтому в вашем случае будет сохранен только индекс 2 со значением test, после чего вы можете использовать count().


В свете вашего комментария:

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 для 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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...