Recursión y estructuras multidimensionales en PHP
Tenemos un array multidimensional de nivel arbitrario de anidamiento, por ejemplo, como este:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Como puedes ver, este array tiene una estructura compleja, y se supone que esta estructura puede ser arbitraria y los niveles de anidamiento pueden ser tan profundos como se desee.
Supongamos que queremos mostrar en pantalla todos los elementos primitivos (es decir, que no son arrays) de nuestro array. En este caso, para recorrer dicho array simplemente no podremos usar bucles, porque el array tiene una estructura irregular y un nivel de anidamiento desconocido.
Sin embargo, para recorrer dicho array será muy conveniente usar recursión.
Para empezar, crearemos una función, a la cual pasaremos nuestro array como parámetro, y dentro de la función crearemos un bucle para recorrer nuestro array:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
El bucle que hemos creado solo recorrerá
los elementos del array principal. Es decir, primero
mostrará 1, luego [2, 7, 8],
y luego [3, 4, [5, [6, 7]].
Ahora, en el bucle, separaremos los elementos primitivos y los elementos que son arrays:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// el elemento es un array
} else {
// el elemento es un primitivo
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Y ahora hagamos que si nuestro elemento es un array, la función se llame a sí misma, pasando este 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 un array multidimensional de nivel arbitrario de anidamiento, por ejemplo, como este:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Mediante recursión, muestra todos los elementos primitivos de este array en pantalla.