Estructuras de control: bucle for

En general, un bucle es una estructura de control que permite repetir un bloque de instrucciones las veces que sea necesario. El bloque de instrucciones que se repite se suele llamar cuerpo del bucle y cada repetición se suele llamar iteración. PHP dispone de varias instrucciones para definir bucles. En esta lección se comenta una de ellas, el bucle for.

Sintaxis del bucle for

La sintaxis más habitual del bucle for es la siguiente:

for (asignación_inicial; condición_continuación; cambio_variable) {
    bloque_de_sentencias
}

La ejecución de esta estructura de control es la siguiente:

Diagrama de flujo

El diagrama de flujo siguiente muestra la ejecución de un bucle for ...:

DIAGRAMA DE FLUJO: BUCLE FOR Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al bucle for. INICIO Efectúa la asignación. ASIGNACIÓN Evalúa la condición ... CONDICIÓN Si la condición es true, ejecuta el bloque ... true BLOQUE ... efectúa el cambio ... CAMBIO y vuelve a evaluar la condición. CONDICIÓN Si la condición es false, termina el bucle for.. false FIN El programa llega al bucle for. INICIO Efectúa la asignación. ASIGNACIÓN Evalúa la condición ... CONDICIÓN Si la condición es true, ejecuta el bloque ... true BLOQUE ... efectúa el cambio ... CAMBIO y vuelve a evaluar la condición. CONDICIÓN Si la condición es false, termina el bucle for.. false FIN

Ejemplos de bucles

En los bucles for más sencillos, en la expresión inicial se inicializa una variable que se evalúa en la expresión de continuación y que se modifica en la expresión de paso, como muestra el ejemplo siguiente:

Ejemplo de bucle for (1)

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>Final</p>

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle for (1) - Paso 1

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

Se ejecuta la primera instrucción del programa.

En este caso, imprime el párrafo de comienzo.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 2

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.

En este caso, la variable de control es $i y toma el valor 0.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 3

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se comprueba si la condición de continuación se cumple.

En este caso, $i es inferior a 3 (vale 0), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 4

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>

A continuación se ejecutan las instrucciones del bloque.

En este caso, se imprime el texto <p>0</p> ya que $i tiene el valor 0.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 5

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>

A continuación se ejecuta la instrucción de paso.

En este caso, la variable $i aumenta una unidad, por lo que ahora vale 1.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 6

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 7

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>1</p> ya que $i tiene el valor 1.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 8

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i aumenta una unidad, por lo que ahora vale 2.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 9

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es inferior a 3 (vale 2), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 10

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>
<p>2</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>2</p> ya que $i tiene el valor 2.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 11

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>
<p>2</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i aumenta una unidad, por lo que ahora vale 3.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 12

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>
<p>2</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i ya no es inferior a 3 (vale 3), así que no se ejecutan las instrucciones del bloque de sentencias y el bucle se termina.

Anterior Siguiente

Ejemplo de bucle for (1) - Paso 13

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i < 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>Final</p>

Una vez terminado el bucle, se ejecuta la instrucción que sigue al bucle.

En este caso, imprime el párrafo final.

Anterior


La costumbre es que las variables que se utilizan en un bucle se llamen $i, $j, $k, etc. pero cualquier nombre sería válido:

<?php
for ($contador = 0; $contador < 5; $contador++) {
    print "<p>$contador</p>\n";
}
?>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>

Los bucles no tienen por qué ir contando de uno en uno, la expresión de paso puede ser cualquiera:

Ejemplo de bucle for (2)

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>
<p>5</p>
<p>Final</p>

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle for (2) - Paso 1

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

Se ejecuta la primera instrucción del programa.

En este caso, imprime el párrafo de comienzo.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 2

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.

En este caso, la variable de control es $i y toma el valor 1.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 3

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se comprueba si la condición de continuación se cumple.

En este caso, $i es inferior a 6 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 4

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se ejecutan las instrucciones del bloque.

En este caso, se imprime el texto <p>1</p> ya que $i tiene el valor 1.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 5

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se ejecuta la instrucción de paso.

En este caso, la variable $i aumenta dos unidades, por lo que ahora vale 3.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 6

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es inferior a 6 (vale 3), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 7

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>3</p> ya que $i tiene el valor 3.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 8

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i aumenta dos unidades, por lo que ahora vale 5.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 9

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es inferior a 6 (vale 5), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 10

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>
<p>5</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>5</p> ya que $i tiene el valor 5.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 11

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>
<p>5</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i aumenta dos unidades, por lo que ahora vale 7.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 12

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>
<p>5</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i ya no es inferior a 6 (vale 7), así que no se ejecutan las instrucciones del bloque de sentencias y el bucle se termina.

Anterior Siguiente

Ejemplo de bucle for (2) - Paso 13

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>3</p>
<p>5</p>
<p>Final</p>

Una vez terminado el bucle, se ejecuta la instrucción que sigue al bucle.

En este caso, imprime el párrafo final.

Anterior


La variable también puede tomar valores descendientes:

Ejemplo de bucle for (3)

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>
<p>4</p>
<p>Final</p>

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle for (3) - Paso 1

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

Se ejecuta la primera instrucción del programa.

En este caso, imprime el párrafo de comienzo.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 2

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.

En este caso, la variable de control es $i y toma el valor 10.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 3

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se comprueba si la condición de continuación se cumple.

En este caso, $i es superior a 2 (vale 10), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 4

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>

A continuación se ejecutan las instrucciones del bloque.

En este caso, se imprime el texto <p>10</p> ya que $i tiene el valor 10.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 5

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>

A continuación se ejecuta la instrucción de paso.

En este caso, la variable $i disminuye tres unidades, por lo que ahora vale 7.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 6

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es superior a 2 (vale 7), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 7

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>7</p> ya que $i tiene el valor 7.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 8

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i disminuye tres unidades, por lo que ahora vale 4.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 9

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i es superior a 2 (vale 4), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 10

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>
<p>4</p>

A continuación se ejecutan de nuevo las instrucciones del bloque.

En este caso, se imprime el texto <p>4</p> ya que $i tiene el valor 4.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 11

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>
<p>4</p>

A continuación se ejecuta de nuevo la instrucción de paso.

En este caso, la variable $i disminuye tres unidades, por lo que ahora vale 1.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 12

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>
<p>4</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i ya no es superior a 2 (vale 1), así que no se ejecutan las instrucciones del bloque de sentencias y el bucle se termina.

Anterior Siguiente

Ejemplo de bucle for (3) - Paso 13

<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 2; $i = $i - 3) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>7</p>
<p>4</p>
<p>Final</p>

Una vez terminado el bucle, se ejecuta la instrucción que sigue al bucle.

En este caso, imprime el párrafo final.

Anterior


Nada impide que la variable de control del bucle se modifique en el cuerpo del bucle, pero eso puede afectar al número de veces que se ejecuta el bucle:

Ejemplo de bucle for (4)

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>Final</p>

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle for (4) - Paso 1

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

Se ejecuta la primera instrucción del programa.

En este caso, imprime el párrafo de comienzo.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 2

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.

En este caso, la variable de control es $i y toma el valor 1.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 3

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se comprueba si la condición de continuación se cumple.

En este caso, $i es inferior a 6 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 4

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se ejecutan las instrucciones del bloque.

En este caso, se imprime el texto <p>1</p> ya que $i tiene el valor 1.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 5

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se aumenta la variable de control.

En este caso, la variable $i aumenta tres unidades, por lo que ahora vale 4.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 6

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se ejecuta la instrucción de paso.

En este caso, la variable $i aumenta dos unidades, por lo que ahora vale 6.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 7

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>

A continuación se comprueba de nuevo si la condición de continuación se cumple.

En este caso, $i ya no es inferior a 6 (vale 6), así que no se ejecutan las instrucciones del bloque de sentencias y el bucle se termina.

Anterior Siguiente

Ejemplo de bucle for (4) - Paso 8

<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 6; $i = $i + 2) {
    print "<p>$i</p>\n";
    $i = $i + 3;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>Final</p>

Una vez terminado el bucle, se ejecuta la instrucción que sigue al bucle.

En este caso, imprime el párrafo final.

Anterior


Si no se va a utilizar el valor de variable auxiliar, los valores concretos no son importantes, lo único que importa es el número de veces que se va a ejecutar el bucle. En estos casos se pueden escribir distintas asignaciones y condiciones. Por ejemplo, estos cuatro programas escribirían cinco veces "Hola":

La primera forma ($i = 0; $i < 5;) suele ser la más utilizada en programación. Sus ventajas son que empieza a contar en 0, como empiezan de forma predeterminada las matrices de índices numéricas, y que el número de iteraciones (5) aparece en la condición de continuación. Al empezar a programar, la tercera forma (($i = 1; $i <= 4;) resulta seguramente más intuitiva porque empieza a contar en 1, como hacemos habitualmente en la vida diaria y el número de iteraciones (5) aparece en la condición de continuación. Pero se recomienda familiarizarse lo antes posible con el hecho de empezar a contar en 0, porque en el futuro lo necesitaremos a menudo.

Ejemplos de bucles incorrectos

El problema más importante que podemos tener con los bucles es crear un bucle infinito, es decir, un bucle que no se termine nunca. Esto ocurre cuando la condición de continuación se cumple siempre. En estos casos, el servidor no enviaría nunca la página al navegador ni sería capaz de responder a nuevas peticiones. Si se ejecuta un programa que contenga un bucle infinito, a veces se puede recuperar la situación deteniendo la página en el navegador, otras veces se puede detener el servidor Apache desde el panel de control de xampp, pero normalmente no queda más remedio que finalizar el proceso (en Windows, habría que hacerlo con el Administrador de Tareas, finalizando el proceso httpd.exe) y reiniciar el servidor.

El bucle infinito se puede provocar de varias maneras:

Otro problema con los bucles puede ser que la expresión de continuación no se cumpla nunca, lo que provoca que el bucle no se ejecute. A veces un bucle depende de unas variables y en algunas situaciones no se ejecuta porque no debe ejecutarse, pero otras veces se trata de un error y el bucle no se ejecuta nunca. En cualquier caso, este problema es menos grave que el anterior porque el programa no entraría en un bucle infinito, pero si se trata de un error probablemente el programa no hará lo que se espera de él.

Ejemplo de bucle for incorrecto (5)

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i > 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Final</p>

Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.

Siguiente

Ejemplo de bucle for incorrecto (5) - Paso 1

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i > 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

Se ejecuta la primera instrucción del programa.

En este caso, imprime el párrafo de comienzo.

Anterior Siguiente

Ejemplo de bucle for incorrecto (5) - Paso 2

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i > 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.

En este caso, la variable de control es $i y toma el valor 0.

Anterior Siguiente

Ejemplo de bucle for incorrecto (5) - Paso 3

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i > 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>

A continuación se comprueba si la condición de continuación se cumple.

En este caso, $i no es superior a 3 (vale 3), así que no se ejecutan las instrucciones del bloque de sentencias y el bucle se termina.

Anterior Siguiente

Ejemplo de bucle for incorrecto (5) - Paso 4

<?php
print "<p>Comienzo</p>\n";
for ($i = 0; $i > 3; $i++) {
    print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Final</p>

Una vez terminado el bucle, se ejecuta la instrucción que sigue al bucle.

En este caso, imprime el párrafo final.

Anterior

Otros bucles for

Las expresiones que aparecen en el bucle for (asignación inicial, condición de continuación y cambio de variable) no están limitadas a una sola expresión. Pueden contener varias expresiones, separadas por comas.