Sì, è possibile utilizzare recursion. Ecco un esempio in cui è uscita di tutti gli elementi di un array:
function printAll($a) {
if (!is_array($a)) {
echo $a, ' ';
return;
}
foreach($a as $v) {
printAll($v);
}
}
$array = array('hello',
array('world',
'!',
array('whats'),
'up'),
array('?'));
printAll($array);
ciò che si dovrebbe sempre ricordare quando fare la ricorsione è che avete bisogno di un caso di base dove non andare più in profondità.
Mi piace verificare il caso base prima di continuare la funzione. È un linguaggio comune, ma non è strettamente necessario. Puoi anche controllare il ciclo foreach
se dovessi eseguire l'output o effettuare una chiamata ricorsiva, ma spesso trovo che il codice sia più difficile da mantenere in questo modo.
La "distanza" tra l'input corrente e il caso base è detta variante ed è un numero intero. La variante dovrebbe essere strettamente decrescente in ogni chiamata ricorsiva. La variante nell'esempio precedente è the depth of $a
. Se non pensi alla variante rischi di finire con ricorsioni infinite e alla fine lo script morirà a causa di uno stack overflow. Non è raro documentare esattamente quale sia la variante in un commento prima delle funzioni ricorsive.
fonte
2012-06-07 09:28:29
N. Uso comando incorporato array_walk_recursive(). PHP fa schifo alla ricorsione. –