PHP while loop: ejecuta hasta fallar la condición
PHP while repite un bloque mientras su condición se evalúe como true. La condición se comprueba antes de cada iteración, así que el cuerpo puede no ejecutarse si la condición empieza en false. Usa while cuando la cantidad de iteraciones depende de una condición en tiempo de ejecución (reintentos, lecturas de streams o paginación) en lugar de un conteo conocido.
Ejemplo de PHP while loop para contador de reintentos
Salida:
La salida aparecerá aquí...
Salida:
Intento 1
Intento 2
Intento 3
Intento 4
Terminado después de 4 intentos
Cómo se detiene el bucle
$intento = 1inicializa la variable contador que controla el fin del bucle.while ($intento <= $maxIntentos)comprueba la condición antes de cada vuelta. Cuando$intentosupera$maxIntentos, el bucle se detiene.- Dentro del cuerpo,
$intento++avanza el contador. Sin esta actualización, la condición nunca pasaría afalsey se produciría un bucle infinito. - Cuando el bucle termina, el código después de la llave de cierre se ejecuta con
$intentotodavía en alcance y valor 5.
Errores comunes con los bucles while de PHP
Olvidar cambiar el estado de la condición
Incorrecto:
$i = 0;
while ($i < 3) {
echo "$i\n";
// falta $i++: bucle infinito
}
Correcto:
$i = 0;
while ($i < 3) {
echo "$i\n";
$i++;
}
Usar = en lugar de === en la condición
Incorrecto:
$isReady = false;
while ($isReady = true) { // asigna true (siempre truthy)
break; // evita un bucle infinito en esta demo
}
Correcto:
$isReady = false;
while ($isReady === true) {
// ...
}
Una expresión de asignación se evalúa con el valor asignado, así que la condición puede permanecer verdadera para siempre. La asignación dentro de una condición solo es intencional cuando capturas el resultado de una función (por ejemplo, en bucles de lectura).
PHP while vs do-while vs for
Usa un bucle PHP do while (do...while) cuando el cuerpo deba ejecutarse al menos una vez.
| Bucle | Comprobación de condición | Ideal para |
|---|---|---|
while | Antes de cada iteración | Número de iteraciones desconocido; puede ejecutar cero veces |
do...while | Después de cada iteración | Debe ejecutarse al menos una vez (validación de entrada, menús) |
for | Antes de cada iteración | Conteo conocido con inicialización/incremento en una línea |
foreach | N/A (itera colecciones) | Arreglos y objetos Traversable |
Usa while para flujos guiados por condición. Cambia a for cuando el bucle tenga un rango fijo y a foreach cuando recorras un arreglo o iterable.
¿Qué es un PHP while loop?
Un PHP while loop es un bucle de control por entrada que evalúa una expresión booleana antes de cada iteración. Si la expresión es true, el cuerpo se ejecuta; si es false, el control salta después de la llave de cierre. PHP también admite la sintaxis alternativa while (condition): ... endwhile;, común en archivos de plantilla donde emparejar llaves puede ser menos legible.
Más ejemplos
Reintentar hasta que una condición tenga éxito con un límite de seguridad:
$exito = false;
$intentos = 0;
while (!$exito && $intentos < 5) {
$intentos++;
$exito = ($intentos === 3); // éxito simulado en el tercer intento
}
echo "Resuelto después de $intentos intentos";
Combinar dos condiciones evita reintentos sin límite. Añade siempre un máximo a los bucles de reintento para evitar comportamientos de denegación de servicio ante fallos transitorios.
Usar do...while para garantizar una ejecución:
$entrada = '';
do {
$entrada = 'válida'; // entrada de usuario simulada
} while ($entrada === '');
echo $entrada;
do...while comprueba la condición después de la primera vuelta, así que el cuerpo siempre se ejecuta al menos una vez. Es útil para prompts y bucles de menú.
FAQ
¿Cómo detienes un while loop en PHP?
Usa break para salir del bucle inmediatamente, o cambia la variable de la condición para que la prueba pase a false. break 2 sale de dos niveles de anidación a la vez. No dependas solo de break para terminar un flujo normal; actualiza la condición para dejar clara la intención del bucle.
¿Un PHP while loop se ejecuta si la condición es falsa?
No. while es un bucle de control por entrada: si la condición se evalúa como false en la primera comprobación, el cuerpo no se ejecuta. Usa do...while cuando el cuerpo deba ejecutarse al menos una vez sin importar la condición inicial. Esta diferencia importa cuando “cero iteraciones” es un resultado válido (resultados vacíos, lecturas fallidas o cero intentos).
¿Puedes recorrer arreglos con while en PHP?
Sí, pero evita each() (se eliminó en PHP 8). Para arreglos, foreach es la opción idiomática. Si necesitas while, lleva un índice y haz incremento, o usa current()/next() cuando realmente quieras semántica de puntero.