Цикл массив массив - PullRequest
       10

Цикл массив массив

0 голосов
/ 08 ноября 2011

в PHP, как я могу зациклить массив массива, не зная, массив это или нет?

Лучше с примером:

Array
(
    [0] => Array
        (
            [0] => big
            [1] => small
        )

    [1] => Array
        (
            [0] => big
            [1] => tiny
        )

    [2] => Array
        (
            [0] => a
            [1] => b
            [2] => c
            [3] => d
            [4] => e
            [5] => f
        )
    [3] => row
    [4] => cols
    [5] => blablabla
    [6] => Array
        (
            [0] => asd
            [1] => qwe
        )
}

Есть идеи?спасибо.

Ответы [ 5 ]

4 голосов
/ 08 ноября 2011

Какой подход выбрать, зависит от того, что вы хотите сделать с данными.

array_walk_recursive [документы] позволяет рекурсивно просматривать массив массивов.

4 голосов
/ 08 ноября 2011

Вы можете использовать is_array , чтобы проверить, является ли этот элемент массивом, если он есть, рекурсивно зацикливать его.

1 голос
/ 08 ноября 2011

Вы можете использовать is_array, чтобы проверить, является ли что-то массивом, и / или вы можете использовать is_object, чтобы проверить, может ли оно использоваться в foreach:

foreach ($arr as $val)
{
    if (is_array($val) || is_object($val)) 
    {
        foreach ($val as $subval)
        {
            echo $subval;
        }
    }
    else
    {
        echo $val;
    }
}

Другой альтернативой является использование RecursiveIteratorIterator:

$it = new RecursiveIteratorIterator(
           new RecursiveArrayIterator($arr),
           RecursiveIteratorIterator::SELF_FIRST);

foreach($it as $value)
{
   # ... (each value)
}

Рекурсивный итератор работает для нескольких уровней в глубину.

0 голосов
/ 08 ноября 2011
$big_array = array(...);
function loopy($array)
{
    foreach($array as $element)
    {
        if(is_array($element))
        {
            // Keep looping -- IS AN ARRAY--
            loopy($element);
        }
        else
        {
            // Do something for this element --NOT AN ARRAY--
        }
    }
}

loopy();
0 голосов
/ 08 ноября 2011
foreach( $array as $value ) {
    if( is_array( $value ) ) {
        foreach( $value as $innerValue ) {
            // do something
        }
    }
}

Это сработает, если вы знаете, что это будет максимум 2 уровня вложенного массива. Если вы не знаете, сколько уровней вложенности, вам нужно будет использовать рекурсию. Или вы можете использовать такую ​​функцию, как array_walk_recursive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...