循环数组数组

时间:2011-11-08 18:11:31

标签: php loops multidimensional-array

在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 个答案:

答案 0 :(得分:4)

您可以使用is_array检查该元素是否为数组,如果是,则递归循环。

答案 1 :(得分:4)

选择哪种方法取决于您要对数据执行的操作。

array_walk_recursive [docs]允许您递归遍历数组数组。

答案 2 :(得分:1)

您可以使用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)
}

递归迭代器适用于多个深度级别。

答案 3 :(得分:0)

foreach( $array as $value ) {
    if( is_array( $value ) ) {
        foreach( $value as $innerValue ) {
            // do something
        }
    }
}

如果您知道最多2级嵌套数组,那将会有效。如果您不知道嵌套的级别,那么您将需要使用递归。或者您可以使用array_walk_recursive

等功能

答案 4 :(得分:0)

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