> Manuales > Manual de PHP

Estructura y funcionamiento de los bucles while y do/while.

Los ordenadores, como cualquier máquina, están diseñados para realizar tareas repetitivas. Es por ello que nuestros programas pueden aprovecharse de este principio para realizar una determinada secuencia de instrucciones un cierto número de veces. Para ello, utilizamos las estructuras llamadas en bucle que nos ayudan a, usando unas pocas líneas, realizar una tarea incluida dentro del bucle un cierto numero de veces definido por nosotros mismos.

PHP propone varios tipos de bucle cada uno con características especificas:

Bucle while

Sin duda el bucle más utilizado y el más sencillo. Lo usamos para ejecutar las instrucciones contenidas en su interior siempre y cuando la condición definida sea verdadera. La estructura sintáctica es la siguiente.

while (condición)
{
   instruccion1;
   instruccion2;
   ...
}

Un ejemplo sencillo es este bucle que aumenta el tamaño de la fuente en una unidad a cada nueva vuelta por el bucle:

<?
$size=1;
While ($size<=6)
{
   echo"<font size=$size>Tamaño $size</font><br>n";
   $size++;
}
?>

Ejecutar script

A modo de explicación, diremos que, antes de nada, hemos de definir el valor de la variable que vamos a evaluar en la condición. Algo absolutamente obvio pero fácil de olvidar. En este caso le hemos atribuido un valor de 1 que corresponde a la letra más pequeña.

El paso siguiente es crear el bucle en el que imponemos la condición que la variable no exceda el valor de 6.

La instrucción a ejecutar será imprimir en nuestro documento un código HTML en el que la etiqueta font y el mensaje que contiene varían a medida que $size cambia su valor.

El siguiente paso es incrementar en una unidad el valor de $size. Esto se puede hacer con una expresión como la mostrada en el bucle ($size++) que en realidad es sinónima de:

$size=$size+1

Veremos otras de estas abreviaciones más adelante.

Otro ejemplo del buble While

El bucle while se suele utiliza cuando no se sabe exactamente cuantas iteraciones se deben realizar antes de acabar. Vamos a utilizarlo en otro ejemplo, en el que hay que recorrer una cadena hasta encontrar un carácter dado. Si lo encuentra, escribir su posición. Si no, escribir que no se ha encontrado.

Nota: Para hacer este ejercicio necesitamos conocer la función de cadena strlen(), que obtiene la longitud de la cadena que se le pase por parámetro.
int strlen (string cad)
Devuelve un entero igual a la longitud de la cadena.
<? 
$cadena = "hola a todo el mundo"; 

//recorro la cadena hasta encontrar una "m" 
$i=0; 
while ($cadena[$i]!="m" && $i< strlen($cadena)){ 
   	$i++; 
} 

if ($i==strlen($cadena)) 
   	echo "No se encuentra..."; 
else 
   	echo "Está en la posición $i"; 
?>

En este ejemplo se define una cadena con el valor "hola a todo el mundo". Posteriormente se recorre esa cadena hasta el final de la cadena o hasta encontrar el caracter "m", utilizando una variable $i que lleva la cuenta de los caracteres recorridos.

Al final del bucle while, si se salió porque se encontró el caracter "m", la variable $i valdrá un número menor que la longitud de la cadema. Si se salió por llegar al final de la cadena, la variable $i valdrá lo mismo que la longitud en caracteres de esa cadena. En el condicional simplemente se comprueba si $i vale o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en cada caso.

Podemos ver el ejemplo en funcionamiento.

Bucle do/while

Este tipo de bucle no difiere en exceso del anterior. La sintaxis es la siguiente:

do
{
   instruccion1;
   instruccion2;
   ...
}
while (condición)

La diferencia con respecto a los bucles while es que este tipo de bucle evalúa la condición al final con lo que, incluso siendo falsa desde el principio, éste se ejecuta al menos una vez.

Referencia: Para una ayuda práctica sobre estos bucles ver el siguiente videotutorial Estructuras de control, Vídeo 2: bucles for, while y do-while. Además, las explicaciones sobre estructuras de control se complementan con el videotutorial de Switch y las instrucciones break y continue.

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Manual