我正在寻找并试着好几天......对不起!
我有一个类似下面的阵列。这是订购但我可能不知道它有多深。我需要遍历它,每个子节点。我不想使用递归,因为我需要将它集成到另一个代码块中,这本身就很困难。我正在寻找像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
(
)
)
)
答案 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.
完成!