W3docs

for

Aprende el bucle for en PHP: inicialización, condición e incremento, iteración de arrays, bucles anidados, infinitos y errores de desplazamiento.

El bucle for en PHP

for es el bucle controlado por contador de PHP. Se utiliza cuando sabes — o puedes calcular — exactamente cuántas veces debe ejecutarse un bloque de código, como iterar desde 0 hasta count($array) - 1, contar hacia atrás o avanzar por intervalos. Esta página cubre las tres partes del encabezado del bucle, cómo se ejecuta cada una, cómo iterar arrays, los bucles infinitos y anidados, la sintaxis alternativa endfor, y los errores de desplazamiento por uno que confunden a la mayoría de los principiantes.

Si en cambio quieres recorrer cada elemento de un array u object sin gestionar un índice, foreach suele ser la mejor opción. Para un bucle que se ejecuta hasta que una condición se vuelve falsa, consulta while. Una comparación general de todos los tipos de bucles se encuentra en PHP Loops.

Sintaxis

for (initialization; condition; increment) {
  // code to be executed on each pass
}

El encabezado tiene tres expresiones, separadas por punto y coma:

ExpresiónCuándo se ejecutaUso típico
initializationUna vez, antes de que comience el bucleConfigurar un contador, p. ej. $i = 0
conditionAntes de cada iteraciónEl bucle continúa mientras sea verdadero
incrementDespués de cada iteraciónAvanzar el contador, p. ej. $i++

El orden de ejecución es: ejecutar initialization, evaluar condition; si es verdadero, ejecutar el cuerpo, luego ejecutar increment, luego volver a evaluar condition, y así sucesivamente. En el momento en que condition se evalúa como falso, el bucle se detiene y el cuerpo no se ejecuta esa última vez.

Un primer ejemplo

<?php

for ($i = 1; $i <= 5; $i++) {
  echo $i . PHP_EOL;
}
// Output:
// 1
// 2
// 3
// 4
// 5

El contador comienza en 1. Después de imprimir 5, $i++ lo convierte en 6, 6 <= 5 es falso y el bucle termina — por lo que se ejecuta exactamente cinco veces.

"Pruébalo tú mismo" no está disponible para este ejemplo.

Iterando sobre un array

Un uso clásico de for es indexar un array. Almacena en caché count() en una variable (o usa el slot de incremento) para que PHP no recuente el array en cada paso:

<?php

$colors = ["red", "green", "blue"];

for ($i = 0, $n = count($colors); $i < $n; $i++) {
  echo $colors[$i] . PHP_EOL;
}
// Output:
// red
// green
// blue

Ten en cuenta que los índices del array comienzan en 0, por lo que el último índice válido es count($colors) - 1. La condición usa < (no <=) precisamente por esto — usar <= aquí leería un elemento más allá del final. Cuando solo necesitas los valores y no el índice, prefiere foreach, que evita toda esta clase de errores de desplazamiento por uno.

Contar hacia atrás y avanzar por intervalos

La expresión de incremento es simplemente código — puede decrementar o saltar cualquier cantidad:

<?php

// Count down
for ($i = 5; $i >= 1; $i--) {
  echo $i . " ";
}
echo PHP_EOL;
// Output: 5 4 3 2 1

// Step by 2 (even numbers only)
for ($i = 0; $i <= 10; $i += 2) {
  echo $i . " ";
}
// Output: 0 2 4 6 8 10

Múltiples expresiones y slots vacíos

Cada uno de los tres slots puede contener varias expresiones separadas por comas, y cualquier slot puede dejarse vacío. Los puntos y coma son obligatorios incluso cuando los slots están en blanco:

<?php

// Two counters moving toward each other
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
  echo "$i-$j" . PHP_EOL;
}
// Output:
// 0-10
// 1-9
// 2-8
// 3-7
// 4-6

Si el slot de condición está vacío, se trata como true, lo que genera un bucle infinito. Entonces controlas la salida desde dentro del cuerpo con break:

<?php

$i = 0;
for (;;) {
  if ($i >= 3) {
    break;
  }
  echo $i . PHP_EOL;
  $i++;
}
// Output:
// 0
// 1
// 2

Usa continue para omitir el resto de la iteración actual y saltar directamente al paso de incremento.

Bucles anidados

Colocar un for dentro de otro te permite trabajar con cuadrículas, tablas y patrones de multiplicación. Usa nombres de contador distintos para cada nivel:

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo ($row * $col) . "\t";
  }
  echo PHP_EOL;
}
// Output:
// 1	2	3
// 2	4	6
// 3	6	9

El bucle interno completa todas sus iteraciones por cada paso del bucle externo.

Sintaxis alternativa endfor

PHP ofrece una forma con dos puntos/endfor que resulta práctica al mezclar bucles con HTML en plantillas, ya que evita llaves de cierre sueltas:

<?php for ($i = 1; $i <= 3; $i++): ?>
  <p>Item <?= $i ?></p>
<?php endfor; ?>

Esto genera tres párrafos <p>. La misma sintaxis alternativa existe para foreach/endforeach.

Errores comunes

  • Errores de desplazamiento por uno. $i <= count($arr) lee una posición más allá del final (advertencia de índice indefinido); usa $i < count($arr).
  • Modificar la longitud del array dentro del bucle. Si el cuerpo agrega o elimina elementos, un count() almacenado en caché puede quedar desactualizado — vuelve a verificarlo o cambia a foreach.
  • Bucles infinitos accidentales. Olvidar el incremento, o comparar en la dirección incorrecta (p. ej. $i-- con $i < 10), hace que la condición nunca sea falsa.
  • Contadores de punto flotante. Avanzar en 0.1 acumula error de redondeo y puede sobrepasar el límite; itera con enteros y divide dentro del cuerpo en su lugar.

Cuándo usar for

Recurre a for cuando el número de iteraciones es conocido o calculado de antemano y genuinamente necesitas el índice (cuentas regresivas, repeticiones fijas, avance por intervalos, construcción de tablas). Cuando simplemente quieres cada elemento de una colección, foreach es más limpio y seguro. Cuando el número de repeticiones depende de una condición que cambia dentro del bucle, usa while o do...while.

Práctica

Práctica
¿Cuál es el uso del bucle 'for' en PHP?
¿Cuál es el uso del bucle 'for' en PHP?
Was this page helpful?