迭代数组没有递归

时间:2013-02-08 16:16:27

标签: php arrays multidimensional-array

我正在寻找并试着好几天......对不起! 我有一个类似下面的阵列。这是订购但我可能不知道它有多深。我需要遍历它,每个子节点。我不想使用递归,因为我需要将它集成到另一个代码块中,这本身就很困难。我正在寻找像foreach这样简单的东西,但这只会给我3个父节点...我需要将每个节点放在一个“块”中,因为我需要像$arr['id_categoria']和{$arr['nome_categoria']那样访问它们{1}}等等

有什么建议吗? 非常感谢!

Array
(
    [3] => Array
        (
            [id_categoria] => 3
            [nome_categoria] => Bebidas
            [id_categoria_pai] => 0
            [submenu] => Array
                (
                    [5] => Array
                        (
                            [id_categoria] => 5
                            [nome_categoria] => Alcoolicas
                            [id_categoria_pai] => 3
                            [submenu] => Array
                                (
                                    [10] => Array
                                        (
                                            [id_categoria] => 10
                                            [nome_categoria] => Espirituosas
                                            [id_categoria_pai] => 5
                                            [submenu] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [11] => Array
                        (
                            [id_categoria] => 11
                            [nome_categoria] => sem alcool
                            [id_categoria_pai] => 3
                            [submenu] => Array
                                (
                                )

                        )

                )

        )

    [4] => Array
        (
            [id_categoria] => 4
            [nome_categoria] => Sandes
            [id_categoria_pai] => 0
            [submenu] => Array
                (
                )

        )

    [7] => Array
        (
            [id_categoria] => 7
            [nome_categoria] => Outros pedidos
            [id_categoria_pai] => 0
            [submenu] => Array
                (
                )

        )

)

2 个答案:

答案 0 :(得分:1)

为此,你必须使用递归,因为你不知道它有多深。

但是,您可以创建一个递归函数来提取数组中的所有单个值。

答案 1 :(得分:1)

递归?你不需要(显式)递归!只需使用RecursiveArrayIterator,将其包装在RecursiveIteratorIterator中,然后迭代,如下所示:

$array = array(); // From the OP

$iter = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array), RecursiveIteratorIterator::SELF_FIRST); 

foreach( $iter as $el) {
    echo $el['id_categoria'];
}

对于您的阵列,将打印:

3 
5
10 
11 
etc.

完成!