Como el sueño se me escapa otra vez, me he puesto a trastear un poco con un ejercicio de PHP que tenía un poco atragantado desde hace unos días. Bien es cierto que poco tiempo le había dedicado hasta hoy. En el ejercicio tratamos un array recursivo como el que aparece líneas más abajo y realizaremos las operaciones que se piden a continuación.
El tratamiento de este array se hará de una función, asi que lo primero que haremos será crear una función recursiva (verValores) que nos muestre el contenido de un array que a su vez puede contener varios arrays anidados.
La función verValores devolverá un array de dos elementos: el primero contiene el número total de elementos y el segundo será un array escalar donde cada posición mostrará un elemento. El array a utilizar será el siguiente.
$datos = array( 'o' => array( 'oasis','objeto','oso'),</code> <code> 't' => array('te','teatro','toro','milcinco' => array( array('mil', 'cinco'),</code> <code> array('one thousand', 'five', array('cielo' => 'rojo','sangre' => 'azul'))</code><code>)</code><code>)</code><code>);
Código para mostrar y contar los valores de un array recursivo
Una vez explicado un poco el ejercicio, ahora va el código. En el explico con los comentarios lo que hace cada una de las líneas.
<?php /* Crear una función recursiva (verValores) que nos muestre el contenido de un array que a su vez puede contener varios arrays anidados. La función verValores devolverá un array de dos elementos: el primero contiene el número total de elementos y el segundo será un array escalar donde cada posición mostrará un elemento. El array a utilizar será el siguiente. */ $contenido=array(); //array global para guardar el contenido $retorno=array(); //array global para que devuelva el resultado //función verValores que recibe un array como parámetro function verValores($array){ //array global para contenido global $contenido; //array global para devolver los valores y el número de valores. global $retorno; //contador estático para realizar la suma de los valores encontrados static $contador=0; //recorremos el array y separamos los índices de los valores foreach($array as $key => $value){ /*en caso de el valor sea un array llamamos otra vez a la función y le pasamos como parámetro el valor*/ if (is_array($value)) { verValores($value); //si no es un array, es un valor }else{ /*guardamos el valor dentro del array contenido y uso como índice del array el valor que tenga contador*/ $contenido[$contador] = $value; //añadimos 1 más al contador para la siguiente vuelta $contador++; } } $retorno[0]=$contador." valores encontrados: "; //guardamos en la primera posición del array para devolver el valor final del contador $retorno[1]=$contenido; //guardamos en la segunda posición del array para devolver el array dónde guardamos el contenido return $retorno; //se devuelve el array de retorno que mostrará el resultado esperado } //Este es el array a evaluar $datos = array('o' => array('oasis','objeto','oso'), 't' => array('te','teatro', 'toro','milcinco' => array(array('mil', 'cinco'),array('one thousand', 'five',array( 'cielo' => 'rojo','sangre' => 'azul') ) ) ) ); /*llamamos a la función verValores, le pasamos el array $datos y guardamos lo que devuelve la función dentro de la variable resultado.*/ $resultado=verValores($datos); //vemos la primera posición del array que devuelve la función verValores echo $resultado[0]; //separamos por comas la segunda posición del array resultado $separado_por_comas = implode(", ", $resultado[1]); /*imprimimos el contenido de la variable donde almacenamos los valores encontrados en el array*/ echo $separado_por_comas; ?>