Sí, puede usar recursion. He aquí un ejemplo de salida donde todos los elementos de 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);
Lo que debe siempre recordar la hora de hacer la recursividad es que se necesita un caso base de donde no ir más profundo.
Me gusta comprobar la carcasa base antes de continuar con la función. Esa es una expresión común, pero no es estrictamente necesaria. También puede verificar en el circuito foreach
si debe realizar una salida o hacer una llamada recursiva, pero a menudo el código es más difícil de mantener de esa manera.
La "distancia" entre su entrada actual y el caso base se llama variante y es un número entero. La variante debe ser estrictamente decreciente en cada llamada recursiva. La variante en el ejemplo anterior es the depth of $a
. Si no piensas en la variante, te arriesgas a terminar con infinitas recursiones y, finalmente, la secuencia de comandos morirá debido a un stack overflow. No es raro documentar exactamente cuál es la variante en un comentario antes de las funciones recursivas.
No. Use la orden interna array_walk_recursive(). PHP apesta en la recursión. –