#4.1 Bucle While en PHP

Cómo se usa el bucle While en php, ejemplos de Bucle WHILE PHP

Estructuras de control php bucles en php

El bucle While es la estructura iterativa más sencilla en lo que se refiere a uso. Su funcionamiento, en cambio, sigue la misma lógica que el resto de bucles en php. Así, comprendida su funcionalidad, y con un poco de práctica, seguir entendiendo y trabajando con bucles será sencillo.

En este tutorial voy a exporte todas las claves para dorminar esta instrucción php:

  1. El diagrama de flujo o esquema de funcionamiento de un bucle while.
  2. Estructura PHP de un bucle while.
  3. Partes: inicialización,  actualización e incremento.
  4. Ejemplos de bucle while y explicación por pasos.

 

¿Cual es la lógica de un bucle While en php?

Al igual que en todos los lenguajes de programación, el bucle while sigue una lógica de repetición que gira entorno a una condición. Esta condición marca cuando empieza, la duración y el final de la ejecución del bucle.

Una forma clara de ver su funcionamiento es mediante su esquema o diagrama de flujo:

Gráficamente la explicación está clara:

  1. Al ejecutar la instrucción WHILE en PHP se comprueba su condición.
  2. Si la condición se cumple se ejecuta el contenido del bucle (sus instrucciones) hasta llegar a la última.
  3. Al terminar la última instrucción de su contenido se vuelve arriba y se comprueba la condición.
  4. Cuando la condición del bucle deje de cumplirse el bucle ha terminado.

Estructura de un bucle While php

La estructura de la sentencia while es simple: su nombre While, una condición o varias entre paréntesis y unas llaves para indicar sobre que líneas actúa. Quedaría así:

<?php
while ( $numero < 10 ) {
}
?>

¿Sencillo verdad? Podríamos decir que ya sabemos crear un while, pero la verdad es que, de forma implícita, un bucle while php requiere normalmente de dos partes más: la inicialización y la actualización. 

La inicialización de un while

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 iteraciones con un bucle y para lograrlo necesitaré un contador, es decir, una variable que pueda ir comparando en la condición del bucle. Que mejor manera de resolver el problema que hacer coincidir mi contador con el inicio del valor a mostrar por pantalla. 

 

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

¿Sería posible realizar el bucle sin la inicialización? Pues norma general ahora que estás iniciandote digamos que es imposible. ¿Cómo le voy a indicar al bucle una condición si ni tan siquiera he inicializado una variable para ello? 

Como tal vez te hayas planteado, existen mil y una posibles implementaciones en programación del WHILE, y no en todas se usará con un contador. Pero imagino que estás empezando en esto de la programación, por lo tanto, la gran mayoría de tus primeros bucles WHILE serán mediante un contador que tendrás que inicializar.

La actualización de un bucle

La actualización está ligada directamente con la inicialización. Si observas 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 entre llaves. Hasta aquí todo bien, pero resulta que es un bucle infinito, ya que si no cambio el valor de $var en cada iteración, $var jamás dejará de ser menor o igual a 10.

Esta parte que he olvidado se llama como no podía ser de otra forma actualización, ya que comprende las líneas de mi código donde actualizo el valor de las variables de las que depende el bucle a un valor distinto.

El ejemplo anterior con actualización sería:

 

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

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 While

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

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

 

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

Este pequeño script calcula el factorial de 5 y luego muestra el resultado por pantalla, es decir, el bucle realiza el cálculo de un factorial 5 * 4 * 3 * 2 * 1. En el ejemplo, si realizáramos el seguimiento del problema (la traza) veríamos que realmente los cálculos que hago son: 5 * 1 * 4 * 3 * 2.

La inicialización de este script sería la primera línea, donde le doy un valor a la variable $numero, de la cual calcularé el factorial. 

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

Orden de ejecución de un bucle While

Vamos a seguir este bucle, o como diríamos los programadores vamos a hacer la traza del problema. Para realizar la traza básicamente lo que haremos es leer el problema conforme lo leería la máquina, es decir, el intérprete de código php, por ejemplo nuestro gran amigo Apache server. Voy a indicar un paso por línea y una descripción de la ejecución entre paréntesis para que se vea claro:

  1. $numero = 5;
  2. $factorial = 1;
  3. ¿¿¿ $numero > 1 ??? ( ¿ 5 > 1 ? verdadero )
  4. $factorial = $factorial * $numero ( $factorial = 5 * 1 )
  5. $numero = $numero - 1 ( $numero = 4 );
  6. ¿¿¿ $numero > 1 ??? ( ¿ 4 > 1 ? verdadero )
  7. $factorial = $factorial * $numero ( $factorial = 5 * 4 )
  8. $numero = $numero - 1 ( $numero = 3 )
  9. ¿¿¿ $numero > 1 ??? ( ¿ 3 > 1 ? verdadero )
  10. $factorial = $factorial * $numero ( $factorial = 20 * 3 )
  11. $numero = $numero - 1 ( $numero = 2 )
  12. ¿¿¿ $numero > 1 ??? ( ¿ 2 > 1 ? verdadero )
  13. $factorial = $factorial * $numero ( $factorial = 60 * 2 )
  14. $numero = $numero - 1 ( $numero = 1 )
  15. ¿¿¿ $numero > 1 ??? ( ¿ 1 > 1 ? falso )
  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:

<?php
while ( $numero < 10 ) {
}
?>

¿Sencillo verdad? Podríamos decir que ya sabemos crear un while, pero la verdad es que, de forma implícita, un bucle while php requiere normalmente de dos partes más: la inicialización y la actualización. 

La inicialización de un while

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 iteraciones con un bucle y para lograrlo necesitaré un contador, es decir, una variable que pueda ir comparando en la condición del bucle. Que mejor manera de resolver el problema que hacer coincidir mi contador con el inicio del valor a mostrar por pantalla. 

 

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

¿Sería posible realizar el bucle sin la inicialización? Pues norma general ahora que estás iniciandote digamos que es imposible. ¿Cómo le voy a indicar al bucle una condición si ni tan siquiera he inicializado una variable para ello? 

Como tal vez te hayas planteado, existen mil y una posibles implementaciones en programación del WHILE, y no en todas se usará con un contador. Pero imagino que estás empezando en esto de la programación, por lo tanto, la gran mayoría de tus primeros bucles WHILE serán mediante un contador que tendrás que inicializar.

La actualización de un bucle

La actualización está ligada directamente con la inicialización. Si observas 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 entre llaves. Hasta aquí todo bien, pero resulta que es un bucle infinito, ya que si no cambio el valor de $var en cada iteración, $var jamás dejará de ser menor o igual a 10.

Esta parte que he olvidado se llama como no podía ser de otra forma actualización, ya que comprende las líneas de mi código donde actualizo el valor de las variables de las que depende el bucle a un valor distinto.

El ejemplo anterior con actualización sería:

 

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

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 While

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

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

 

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

Este pequeño script calcula el factorial de 5 y luego muestra el resultado por pantalla, es decir, el bucle realiza el cálculo de un factorial 5 * 4 * 3 * 2 * 1. En el ejemplo, si realizáramos el seguimiento del problema (la traza) veríamos que realmente los cálculos que hago son: 5 * 1 * 4 * 3 * 2.

La inicialización de este script sería la primera línea, donde le doy un valor a la variable $numero, de la cual calcularé el factorial. 

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

Orden de ejecución de un bucle While

Vamos a seguir este bucle, o como diríamos los programadores vamos a hacer la traza del problema. Para realizar la traza básicamente lo que haremos es leer el problema conforme lo leería la máquina, es decir, el intérprete de código php, por ejemplo nuestro gran amigo Apache server. Voy a indicar un paso por línea y una descripción de la ejecución entre paréntesis para que se vea claro:

  1. $numero = 5;
  2. $factorial = 1;
  3. ¿¿¿ $numero > 1 ??? ( ¿ 5 > 1 ? verdadero )
  4. $factorial = $factorial * $numero ( $factorial = 5 * 1 )
  5. $numero = $numero - 1 ( $numero = 4 );
  6. ¿¿¿ $numero > 1 ??? ( ¿ 4 > 1 ? verdadero )
  7. $factorial = $factorial * $numero ( $factorial = 5 * 4 )
  8. $numero = $numero - 1 ( $numero = 3 )
  9. ¿¿¿ $numero > 1 ??? ( ¿ 3 > 1 ? verdadero )
  10. $factorial = $factorial * $numero ( $factorial = 20 * 3 )
  11. $numero = $numero - 1 ( $numero = 2 )
  12. ¿¿¿ $numero > 1 ??? ( ¿ 2 > 1 ? verdadero )
  13. $factorial = $factorial * $numero ( $factorial = 60 * 2 )
  14. $numero = $numero - 1 ( $numero = 1 )
  15. ¿¿¿ $numero > 1 ??? ( ¿ 1 > 1 ? falso )
  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 de uso de un While php

El planteamiento de un while PHP se basaría en identificar las tres partes vistas: inicialización, condición, actualización.

Realmente a la primera pregunta que debemos hacernos es ¿Cuantas iteraciones requiere mi bucle?. Una vez conocido el número de iteraciones, ya sea un número fijo o dependiente del valor de una variable, debemos comenzar a dividir en tres partes el problema.

Pensemos el planteamiento seguido con el ejemplo anterior que calcula el factorial de un número:

  1. Si pensamos en el factorial de un número, por ejemplo 4: 4 * 3 * 2 * 1 vemos como hay 4 números que intervienen en la operación, pero realmente yo multiplico de dos en dos: 4 * 3, 12 * 2, 24 * 1. Entonces, para un 4 tendré 3 operaciones, y para un 5 serán 4. Por lo tanto el número de iteraciones de mi bucle serán $numero - 1. Ahora ya sé que mi bucle depende completamente de la variable $numero.
  2. La inicialización por lo tanto será la variable que marca la evolución del bucle, $numero.
  3. Mi condición deberá lograr junto con la actualización, que mi bucle haga $numero - 1 iteraciones. También sé que el número debe multiplicarse por todos los números entre él ( $numero ) y 1. Llego a la conclusión por lo tanto de que la condición de mi bucle debería ser: $numero > 1. Digo mayor y no mayor o igual para asegurarme que el WHILE hace $numero - 1 repeticiones, en caso contrario haría $numero iteraciones.
  4. La actualización la haré de 1 en 1, es decir, como debo disminuir el número hasta llegar a 1, restaré en cada iteración 1.

Resumen bucle While

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

  • El bucle while en PHP es una estructura de control iterativa.
  • Un bucle while se define mediante su sentencia y una condición simple o múltiple y un número de líneas de código entre llaves.
  • Aunque la condición es la única parte obligatoria de un bucle while, para lograr un bucle completo deberemos contemplar la inicialización y actualización del bucle.
  • Cuando la condición del bucle while sea falsa el bucle terminará.

Extra: conocimientos que hemos usado en 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.