Ricorsione e strutture multidimensionali in PHP
Dato un array multidimensionale di livello arbitrario di annidamento, ad esempio, come questo:
<?php
$arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
?>
Come puoi vedere, questo array ha una struttura complessa, e si presuppone che questa struttura possa essere arbitraria e i livelli di annidamento possono essere profondi a piacere.
Supponiamo di voler visualizzare a schermo tutti gli elementi primitivi (cioè non array) del nostro array. In questo caso, per iterare su un tale array non potremo semplicemente utilizzare i cicli, poiché l'array ha una struttura irregolare e un livello di annidamento sconosciuto.
Tuttavia, per iterare su un tale array sarà molto comodo utilizzare la ricorsione.
Per iniziare, creiamo una funzione, a cui passeremo il nostro array come parametro, e all'interno della funzione creiamo un ciclo per iterare il nostro array:
<?php
function func($arr) {
foreach ($arr as $elem) {
echo $elem;
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
Il ciclo che abbiamo creato itererà solo sugli
elementi dell'array principale. Cioè all'inizio
stamperà 1, poi [2, 7, 8],
e poi [3, 4, [5, [6, 7]].
Ora, all'interno del ciclo, separiamo gli elementi primitivi dagli elementi array:
<?php
function func($arr) {
foreach ($arr as $elem) {
if (is_array($elem)) {
// l'elemento è un array
} else {
// l'elemento è un primitivo
echo $elem;
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
?>
E ora facciamo in modo che se il nostro elemento è un array, la funzione richiami sé stessa, passando come parametro questo array:
<?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]]]]);
?>
Dato un array multidimensionale di livello arbitrario di annidamento, ad esempio, come questo:
<?php
$arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, 10]]];
?>
Utilizzando la ricorsione, visualizza tutti gli elementi primitivi di questo array a schermo.