Recursão e Estruturas Multidimensionais em PHP
Dado um array multidimensional com nível arbitrário de aninhamento, por exemplo, como este:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Como você pode ver, este array tem uma estrutura complexa, e assume-se que essa estrutura pode ser arbitrária e os níveis de aninhamento podem ser tão profundos quanto necessário.
Suponha que queiramos exibir todos os elementos primitivos (ou seja, que não são arrays) do nosso array. Neste caso, para iterar sobre esse array simplesmente não será possível usar loops, pois o array tem uma estrutura irregular e um nível de aninhamento desconhecido.
No entanto, para iterar sobre esse array, será muito conveniente usar recursão.
Para começar, vamos criar uma função que receberá nosso array como parâmetro, e dentro da função faremos um loop para percorrer nosso array:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
O loop que criamos irá iterar apenas sobre
os elementos do array principal. Ou seja, primeiro
ele exibirá 1, depois [2, 7, 8],
e depois [3, 4, [5, [6, 7]].
Agora, vamos separar no loop os elementos primitivos e os elementos que são arrays:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// elemento é um array
} else {
// elemento é um primitivo
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
E agora vamos fazer com que, se o nosso elemento for um array, a função chame a si mesma, passando esse array como parâmetro:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
func($elem);
} else {
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Dado um array multidimensional com nível arbitrário de aninhamento, por exemplo, como este:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Usando recursão, exiba todos os elementos primitivos deste array na tela.