3.7 Aprende a usar bucle FOR en PHP

Clase de php sobre el bucle for. Como usarlo, ejemplos prácticos y nomenclatura alternativa.

Tag PHP bucles en php Estructuras de control php

El bucle for es otra estructura iterativa al igual que el bucle while. Su funcionamiento es idéntico pero varia la forma de programarlo. Por esto te recomiendo que sí no has leído la publicación sobre el bucle WHILE (es muy completa) te recomiendo que la leas: como funciona y como se usa el bucle while.

El diagrama de flujo de un for , es decir, como lo ejecuta el intérprete de código (normalmente Apache), sería el siguiente:

Estructura de un bucle For php

La estructura de la sentencia for es la siguiente: su nombre (for), la inicialización de datos que deseemos, una condición o varias entre paréntesis, una actualización de información que se ejecutará cuando una repetición termine y unas llaves para indicar sobre que líneas actúa. Quedaría así:

<?php
for ( $contador = 0; $contador < 10; $contador = $contador + 1 ) {
}
?>

¿Lo has entendido? Dentro de los paréntesis están las tres zonas que te he comentado (inicialización de datos; condición; actualización). Conocer su estructura es el primer paso para empezar a utilizar los bucles for de forma normal en nuestros desarrollos. 

La inicialización del bucle for

La inicialización se refiere a la creación o preparación, según interese, de una variable o elemento que marque en que momento el bucle comenzará a realizar iteraciones.

Si por ejemplo nos piden contar del 1 al 10, mi inicialización podría ser $var = 1. ¿Por qué? Pues porque mi estrategia será realizar 10 repeticiones (en adelante iteraciones) con un bucle y para lograrlo necesitaré un contador, es decir, una variable que pueda ir comparando en la condición del bucle hasta que deje de cumplirse (es lo que debemos de pensar al hacer bucles). Entonces que mejor manera de resolver el problema que hacer coincidir mi contador con el inicio del valor a mostrar por pantalla. 

<?php
for ( $var = 1; $var <= 10; $var = $var + 1 ){
    echo $var;
}
?>

La zona subrayada es la inicialización. ¿Es posible crear el bucle sin la inicialización? Por norma general diremos que es imposible. ¿Cómo voy a indicar al bucle una condición si no he inicializado una variable para poder comparar? 

Existen mil y una posibles implementaciones en programación del FORla estructura siempre será la misma, pero habrá cambios en la forma de usarla, por ejemplo no en todas se usará con un contador. Cuando  empiezas en la programación, la gran mayoría de tus primeros bucles FOR serán mediante un contador que tendrás que inicializar.

La actualización de un bucle

La actualización está relacionada directamente con la inicialización del bucle. En el ejemplo anterior, he inicializado la variable $var a 1 y he indiciado al bucle mediante la condición $var <= 10 que, mientras el valor de $var sea menor o igual a 10 ejecute las líneas de código entre sus llaves.  Pero lo que hará que se puedan realizar esas repeticiones será la actualización (la tercera parte del interior de los paréntesis), que va cambiando el valor del contador para cada repetición.

La actualización se ejecuta cada vez que se ha hecho una iteración del bucle. En esta zona del bucle FOR puedo realizar las operaciones que necesite que se ejecuten al terminar el bucle. Programar en esta zona del FOR es similar a escribir este mismo código en la última línea anterior a la llave de cierre.

El ejemplo anterior la actualización es la zona subrayada:

<?php
for ( $var = 1; $var <= 10; $var = $var + 1 ){
    echo $var;
}
?>

Como te he comentado, en este ejemplo, escribir la actualización del FOR en su lugar correspondiente es similar a hacerlo en la última línea:

<?php
for ( $var = 1; $var <= 10; ){
    echo $var;
$var = $var + 1;
}
?>

La actualización de un bucle se refiere a las líneas de código donde se modifica el valor de una variable o varias de las que depende la ejecución o no de las líneas del bucle. De esta forma la condición del bucle se evaluará a falso en algún momento dado y se terminará su ejecución.

Ejemplo bucle For

Vamos a ver un ejemplo más complejo con el que trabajar la sentencia FOR:

Ejercicio php: Realizar un script que calcule el factorial de un número, para el ejemplo usar el 5.

Solución:

<?php //ejemplo de factorial de numero 5
$factorial = 1;
for($numero = 5; $numero > 1; $numero = $numero - 1 ) {
   $factorial = $factorial * $numero;
}
echo ' El factorial de ' . $numero . ' es ' . $factorial.
?>

Este pequeño script calcula el factorial de 5 y, al finalizar, muestra el resultado con un echo, es decir, el bucle realiza el cálculo de un factorial 5 * 4 * 3 * 2 * 1. Si realizáramos el seguimiento de la ejecución del código del ejercicio (que se le llama hacer la traza) veríamos que los cálculos que se hacen y en el orden ejecutado son: 5 * 1 * 4 * 3 * 2.

En el bucle FOR si lo comparamos con un WHILE queda mucho más diferenciado las tres partes com 

La actualización la comprende la resta de 1 al número$numero = $numero - 1.

Orden de ejecución paso a paso de un bucle for

Vamos a seguir la ejecución por parte de Apache del bucle, o como diríamos los programadores vamos a realizar la traza del problema. Para la traza básicamente lo que haremos será leer el problema conforme lo leería la máquina, es decir, el intérprete de código php. Por ejemplo nuestro compañero de fatigas Apache server.

La siguiente descripción será cada una de las instrucciones que se ejecutan, línea a línea, con una descripción de los valores que pueden intervenir entre paréntesis para que se vea claro. Te recomiendo que tengas tu código a mano para seguirlo mientras lees :

  1. $factorial = 1;
  2. $numero = 5;
  3. ¿¿¿ $numero > 1 ??? ( ¿ 5 > 1 ?  condición verdadera, seguimos )
  4. $factorial = $factorial * $numero ( $factorial = 5 * 1 )
  5. $numero = $numero - 1 ( $numero = 5 - 1 );
  6. ¿¿¿ $numero > 1 ??? ( ¿ 4 > 1 ? la condición es verdadera, seguimos repitiendo )
  7. $factorial = $factorial * $numero ( $factorial = 5 * 4 )
  8. $numero = $numero - 1 ( $numero = 4 - 1 )
  9. ¿¿¿ $numero > 1 ??? ( ¿ 3 > 1 ? verdadero )
  10. $factorial = $factorial * $numero ( $factorial = 20 * 3 )
  11. $numero = $numero - 1 ( $numero = 3 - 1 )
  12. ¿¿¿ $numero > 1 ??? ( ¿ 2 > 1 ? verdadero )
  13. $factorial = $factorial * $numero ( $factorial = 60 * 2 )
  14. $numero = $numero - 1 ( $numero = 2 - 1 )
  15. ¿¿¿ $numero > 1 ??? ( ¿ 1 > 1 ? condición falsa, no se ejecuta el código del bucle )
  16. echo ' El factorial de ' . $numero . ' es ' . $factorial ( El factorial de 5 es 120 )
  17. fin

El diagrama de flujo de este script sería:

Planteamiento para utilizar bucles For php

El planteamiento principal de un un bucle for se basa en identificar las tres partes vistas: inicialización, condición, actualización.

La primera pregunta que debemos hacernos cuando detectemos que necesitamos un bucle for es ¿Cuantas iteraciones requiere mi bucle?. Una vez sepamos el número de repeticiones, ya sea un número concreto o dependiente del valor de una variable, debemos comenzar a dividir en partes el problema.

Vamos a repasar el planteamiento  que he seguido con el ejemplo anterior (el que calcula el factorial de un número):

  1. Si anilizamos la operación de calcular el factorial de un número, como por ejemplo el del número 4 (4 * 3 * 2 * 1 ) vemos 4 números que intervienen en la operación,  pero como realmente yo multiplico de dos en dos (4 * 3, 12 * 2, 24 * 1) obtenemos 3 operaciones. Entonces, para un factorial de 4 tendré 3 operaciones, y para un 5 serán 4. Por lo tanto el número de iteraciones de mi bucle serán el número que quiero calcular el factorial menos 1: $numero - 1. Ahora que ya conocemos que el bucle depende completamente de la variable $numero.
  2. La inicialización será entonces la variable que marca la evolución del bucle: $numero.
  3. Ahora viene la condición, una parte algo confusa cuando uno empieza. La  condición debe lograr junto con la actualización a que el bucle haga $numero - 1 iteraciones. También sabemos que el número debe multiplicarse por todos los números entre el  $numero  y 1. Llegamos a la conclusión por lo tanto de que la condición del bucle debería ser: $numero > 1. Digo mayor y no mayor o igual para asegurarme que el WHILE hace $numero - 1 repeticiones, es decir, cuando $numero tenga el valor 1 dejará de cumplirse la condición, si por el contrario dijeramos ">="  el bucle haría $numero iteraciones.
  4. Por último, la actualización la haré de 1 en 1, es decir,  decrementando el número hasta llegar a 1. Cuando el bucle termine una iteración restaré 1.

Resumen conceptos bucle For

En resumen, los conceptos que hemos visto en la lección serían:

  • El bucle for es una estructura de control iterativa.
  • Un bucle for se define mediante su sentencia, una actualización, una condición y una actualización de datos. Además tiene un número de líneas de código entre llaves que se ejecutarán siempre y cuando la condición se cumpla.
  • Cuando la condición del bucle for sea falsa el bucle terminará de ejecutarse. El intérprete de código seguirá por la línea justo después de la llave de cierre del bucle.

Extra: conocimientos para enteder esta lección:

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.