while
En PHP, la palabra clave "while" crea un bucle que ejecuta un bloque de código repetidamente mientras una condición sea verdadera.
El bucle while en PHP
El bucle while es el bucle más sencillo en PHP. Ejecuta un bloque de código una y otra vez mientras una condición se mantenga verdadera, y se detiene en el momento en que esa condición se vuelve falsa. Úsalo cuando no sabes de antemano cuántas iteraciones necesitarás — por ejemplo, al leer filas de una base de datos hasta que no queden más, o al reintentar una operación hasta que tenga éxito.
Esta página cubre la sintaxis de while, la forma alternativa con endwhile, cómo while difiere de do...while, y el error más común — el bucle infinito — y cómo evitarlo.
Sintaxis
while (condition) {
// Code to be executed while the condition is true
}La condición se evalúa antes de cada iteración:
- PHP comprueba la
condition. - Si es
true, el cuerpo se ejecuta una vez y PHP vuelve al paso 1. - Si es
false, el bucle termina y la ejecución continúa después de la llave de cierre.
Dado que la comprobación ocurre primero, el cuerpo puede ejecutarse cero veces — si la condición ya es falsa en la primera comprobación, el cuerpo del bucle se omite por completo.
Sintaxis alternativa con endwhile
PHP también ofrece una forma con dos puntos y endwhile, que resulta útil cuando se mezclan bucles con HTML en una plantilla:
<?php $i = 1; ?>
<ul>
<?php while ($i <= 3): ?>
<li>Item <?= $i ?></li>
<?php $i++; ?>
<?php endwhile; ?>
</ul>Ambas formas se comportan de manera idéntica; elige la que resulte más legible en cada contexto.
Uso
La palabra clave "while" se usa comúnmente en PHP para crear bucles que repiten un bloque de código hasta que se cumple una determinada condición. Por ejemplo, puedes usar un bucle "while" para iterar sobre los elementos de un array:
Ejemplo de la palabra clave while en PHP
En este ejemplo, el bucle "while" se usa para iterar sobre los elementos del array $myArray. La variable $i se utiliza para llevar el seguimiento del índice actual en el array, y el bucle continúa ejecutándose mientras $i sea menor que el número de elementos del array. Dentro del bucle, usamos la instrucción echo para mostrar el elemento actual del array y luego incrementamos $i para pasar al siguiente elemento.
Ejemplos
A continuación se muestran algunos ejemplos adicionales de cómo se puede usar el bucle while en PHP.
Ejemplo 1: Generar un número aleatorio hasta que se cumpla una condición
En este ejemplo, usamos un bucle "while" para generar números aleatorios hasta obtener un número mayor o igual a 10. Dentro del bucle, generamos un número aleatorio usando la función rand() y lo mostramos con la instrucción echo. Continuamos generando números aleatorios y mostrándolos hasta obtener un número mayor o igual a 10.
Ejemplo 2: Iterar sobre un conjunto de resultados de una base de datos
Iteración sobre un conjunto de resultados de una base de datos en PHP
<?php
$query = "SELECT * FROM my_table";
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result)) {
echo $row['column_name'] . "<br>";
}En este ejemplo, usamos un bucle while para iterar sobre el conjunto de resultados devuelto por una consulta a la base de datos. La función mysqli_fetch_assoc() devuelve la siguiente fila como un array asociativo, o false cuando no hay más filas — por lo que el bucle se detiene automáticamente una vez que el conjunto de resultados se agota. Esto funciona porque la asignación $row = mysqli_fetch_assoc($result) se evalúa al valor asignado, y false termina el bucle.
Evitar el bucle infinito
El error más común con while es olvidarse de cambiar la variable de la que depende la condición. Si la condición nunca se vuelve falsa, el bucle se ejecuta indefinidamente y congela tu script:
<?php
$i = 0;
// Bug: $i is never incremented, so $i < 5 stays true forever.
while ($i < 5) {
echo "running...\n";
// $i++; <-- this line is missing
}Asegúrate siempre de que algo dentro del bucle acerque la condición a false. También puedes salir anticipadamente con break, o saltar el resto de la iteración actual con continue.
while vs do...while
Un bucle while comprueba la condición antes de ejecutar el cuerpo, por lo que el cuerpo puede ejecutarse cero veces. Un bucle do...while comprueba la condición después del cuerpo, por lo que el cuerpo siempre se ejecuta al menos una vez:
<?php
$i = 10;
// Condition is false from the start, so this prints nothing.
while ($i < 5) {
echo "while: $i\n";
$i++;
}
// do...while runs the body once before checking, so it prints "do-while: 10".
do {
echo "do-while: $i\n";
$i++;
} while ($i < 5);Elige do...while cuando el cuerpo del bucle deba ejecutarse al menos una vez (por ejemplo, al solicitar entrada a un usuario hasta que proporcione un valor válido).
Conclusión
El bucle while ejecuta un bloque de código mientras su condición sea verdadera, comprobando esa condición antes de cada pasada. Úsalo cuando el número de iteraciones no se conoce de antemano, protégete contra los bucles infinitos actualizando la condición dentro del cuerpo, y elige do...while cuando el cuerpo deba ejecutarse al menos una vez.
Para explorar otras formas de repetir código en PHP, consulta el bucle for (el mejor cuando conoces el número de iteraciones) y el bucle foreach (el mejor para recorrer arrays). Para una comparación general de todos ellos, lee el resumen de bucles en PHP.