Métodos para recorrer vectores en PHP5

Ya hemos estudiado distintos métodos para recorrer un vector o matriz en PHP5, ahora vamos a repasar estos métodos y ver algunas técnicas nuevas, en resumen tendremos las siguientes modalidades para recorrer un vector con:

  1. Recorrido secuencial con for
  2. Recorrido usando la instrucción foreach
  3. Recorrido manejando el cursor interno de PHP para matrices
  4. Recorrido con while y do…while
  5. Recorrido recuperando todos los índices y valores
  6. Uso de la función array_walk
  7. Como ves disponemos de unos 7 métodos distintos para recorrer una matriz, cada un de ellos es útil en determinadas ocasiones, pero principalmente vamos a utilizar siempre el recorrido secuencial con for y el recorridos asociativo usando foreach.

    Recorrido secuencial con for

    Para hacer un uso eficiente de este recorrido deberemos conocer dos funciones con semejante uso, La función count($vector) y la función sizeof($vector). Ambas funciones tienen el mismo uso, se invoca a la función pasándole como parámetro el vector que queremos contar, de tal forma que nos retorna el número de elementos del vector, veamos un ejemplo:

    //Función que pinta la parte incial de una una tabla en HTML
    function pintar_comienzo_tabla()
    	{
    	?>
    	<table border="1" align="center" width="250">
    	<thead>
    	<tr><th>Indice</th><th>Valor</th></tr>
    	</thead>
    	<tbody>
    	<?php
    	}
    //Función que pinta la parte final de una una tabla en HTML
    function pintar_fin_tabla()
    	{
    	?>
    	</tbody>
    	</table>
    	<?php
    	}
    //Haremos uso de la función count
    function recorrido1 ($vector)
    	{
    	pintar_comienzo_tabla();
    	for ($i=0;$i<count($vector);$i++)
    		echo "<tr><td>$i</td><td>$vector[$i]</td></tr>";
    	pintar_fin_tabla();
    	}
    //Haremos uso de la función sizeof 
    function recorrido2 ($vector)
    	{
    	pintar_comienzo_tabla();
    	for ($i=0;$i<sizeof($vector);$i++)
    		echo "<tr><td>$i</td><td>$vector[$i]</td></tr>";
    	pintar_fin_tabla();
    	}
    //Cuerpo principal del programa
    recorrido1($v);
    recorrido2($v);
    ?>
    

    Ejercicios

    1. Haz que se recorre de forma inversa
    2. Incluye y usa una función que cambie el color de las filas

    Recorrido usando la instrucción foreach

    La función foreach hará un recorrido secuencial de nuestro vector, tanto si este es secuencial como escalar, tratando cada elemento sin necesidad del uso de un índice y sin tener que saber la longitud de la matriz de antemano.

    <?php
    $v = array(54,76,89,23,12,"rosa","flor","arena",45,34);
    
    //Haremos uso de la función count
    
    //Función que pinta la parte incial de una una tabla en HTML
    function pintar_comienzo_tabla()
    	{
    	?>
    	<table border="1" align="center" width="250">
    	<thead>
    	<tr><th>Indice</th><th>Valor</th></tr>
    	</thead>
    	<tbody>
    	<?php
    	}
    //Función que pinta la parte final de una una tabla en HTML
    function pintar_fin_tabla()
    	{
    	?>
    	</tbody>
    	</table>
    	<?php
    	}
    //recorrido usando foreach
    function recorrido ($vector)
    	{
    	pintar_comienzo_tabla();
    	foreach ($vector as $indice => $contenido)
    		echo "<tr><td>$indice</td><td>$contenido</td></tr>";
    	pintar_fin_tabla();
    	}
    
    //Cuerpo principal del programa
    recorrido($v);
    ?>
    

    Ejercicios

    1. Averigua cuantas filas tiene usando un contador
    2. Incluye y usa una función que cambie el color de las filas

    Recorrido manejando el cursor interno de PHP para matrices

    PHP dispone de un cursor para manejar y recorrer matrices. Este cursor proporciona distintas funciones:

    • reset($v), sitúa el cursor interno en el primer elemento
    • next($v), avanza un elemento del vector, devuelve false al final
    • prev($v), retrasa un elemento del vector, devuelve false al final
    • end($v), sitúa el cursor interno en el último elemento
    • current($v) ó pos($v), devuelve el contenido de la posición actual
    • key($v), devuelve el índice (la clave) del elemento

    Veamos este ejemplo para comprender el cursor.

    <?php
    $v = array(54,76,89,23,12,"rosa","flor","arena",45,34);
    function recorrido ($vector)
    	{
    	end($vector); // nos situamos al final del vector
    	echo "<p>".pos($vector)."</p>"; //mostraremos el último elemento ya que estamos en el final
    	prev($vector); //retrasa una posición
    	echo "<p>".key($vector)."</p>"; //mostraremos la clave del penúltimo elemento, será 8
    	reset($vector); //Vamos al primer elemento del vector
    	echo "<p>".key($vector)."--".current($vector)."</p>"; //mostrará la clave del primer elemento
    	do 
    	{
    		echo "<p>".current($vector)."</p>";       //Recorreremos todo el vector hacía delante y lo iremos mostrando
    	}
    	while (next($vector));
    	
    	//Al terminar el while estaremos en la última posición pero vuelve a la primera.
    	end ($vector);
    	while (prev($vector))
    		{
    		echo "<p>".current($vector)."</p>";       //Recorreremos todo el vector hacía atrás y lo iremos mostrando
    		}
    	//Al terminar el while estaremos en la primera posición
    	}
    
    //Cuerpo principal del programa
    recorrido($v);
    ?>
    

    Ejercicios

    1. Sitúate al final del vector y muestra su contenido
    2. Retrasa tres posiciones y muestra el índice y el contenido
    3. Ponte en el principio y muestra el contenido de los dos siguientes elementos
    4. Muestra el contenido de la posición actual

    Recorrido recuperando todos los índices y valores

    PHP nos permite usar dos funciones, array_values que nos devolverá un vector escalar con todos los valores del array indexados de 0 en adelante y array_keys que nos devolverá un array escalar con todos los nombre de las claves.

    <?php
    $escalar = array(54,76,89,23,12);
    $asociativo = array("uno"=>54,"dos"=>76,"tres"=>89,"cuatro"=>23,"cinco"=>12);
    function recorrido ($vector)
    	{
    	foreach ($vector as $indice => $contenido)
    		echo "<p>".$indice."--".$contenido;
    	}
    //Cuerpo principal del programa
    recorrido(array_values($escalar));
    recorrido(array_keys($escalar));
    recorrido(array_values($asociativo));
    recorrido(array_keys($asociativo));
    ?>
    

    Recorrido usando array_walk

    Por último PHP nos permite recorrer un array aplicando una función a cada elemento. Para ello deberemos tener declarada previamente la función que reciba 2 parámetros, el primero será el contenido y el segundo será el índice, veamos un ejemplo:

    <?php
    $v = array(54,76,89,23,12);
    function ejemplo ($contenido,$indice)
    	{
    	echo "<p>El indice es: ".$indice."</p>";
    	echo "<p>El contenido es: ".$contenido."</p>";
    	}
    //Cuerpo principal del programa
    array_walk($v,'ejemplo');
    ?>
    

    Ejercicios

    1. Usa este método para devolver la multiplicación de todos los valores de un vector por su índice
    2. Usa este método para devolver los valores que tienen índices pares
    3. Usa este método para devolver los valores mayores de 5
    4. Optativo, mira en el tema 3 los parámetros por referencia y haz los ejemplo del libro que utilizan estos atributos

    Originally posted 2011-02-16 19:56:25.

3 Responses to “ Métodos para recorrer vectores en PHP5 ”

  1. feliciana martínez dice:

    me puedes explicar el do…..while.

    • jlmora dice:

      Do…while hace algo mientras que se cumpla la condición de salida.

      Un Do while siempre hará la primera interacción, luego comprobará la condición de salida, si es verdadera repetirá y si es falsa abandonará el bucle
      Lo podemos comparar con while usando un ejemplo:

      $i=20
      while ($i<10)
      {
      ....
      }

      El while nunca entrará por $i<20 devuelve FALSE

      $i=20
      do
      {
      }
      while ($i<10)

      Entrará en la primera ocasión, porque no compara hasta el final del primer ciclo.

  2. feliciana martínez dice:

    j.l,ya sé que no estamos hablando de este tema pero me podías dar la solucion de estos dos ejercicios:
    Retrasa tres posiciones y muestra el índice y el contenido
    Ponte en el principio y muestra el contenido de los dos siguientes elementos

Deja un comentario