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.
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:
El diagrama de flujo siguiente muestra la ejecución de un bucle for ...:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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":
<?php
for ($i = 0; $i < 5; $i++) {
print "<p>Hola</p>\n";
}
?>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<?php
for ($i = 0; $i <= 4; $i++) {
print "<p>Hola</p>\n";
}
?>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<?php
for ($i = 1; $i <= 5; $i++) {
print "<p>Hola</p>\n";
}
?>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<?php
for ($i = 1; $i < 6; $i++) {
print "<p>Hola</p>\n";
}
?>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
<p>Hola</p>
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.
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:
Ejemplo de bucle for incorrecto (1)
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
. . .
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de bucle for incorrecto (1) - Paso 1
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $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 (aunque el usuario sólo recibirá la página producida cuando termine el programa, cosa que no va a ocurrir)
Ejemplo de bucle for incorrecto (1) - Paso 2
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $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 10.
Ejemplo de bucle for incorrecto (1) - Paso 3
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $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 superior a 3 (vale 10), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (1) - Paso 4
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
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.
Ejemplo de bucle for incorrecto (1) - Paso 5
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
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 aumenta una unidad, por lo que ahora vale 11.
Ejemplo de bucle for incorrecto (1) - Paso 6
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
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 3 (vale 11), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (1) - Paso 7
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, se imprime el texto <p>11</p> ya que $i tiene el valor 11.
Ejemplo de bucle for incorrecto (1) - Paso 8
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</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 12.
Ejemplo de bucle for incorrecto (1) - Paso 9
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i es superior a 3 (vale 12), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (1) - Paso 10
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, se imprime el texto <p>12</p> ya que $i tiene el valor 12.
Ejemplo de bucle for incorrecto (1) - Paso 11
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
A continuación se ejecuta de nuevo la instrucción de paso.
En este caso, la variable $i aumentará una unidad cada vez, por lo que ahora vale 13.
Ejemplo de bucle for incorrecto (1) - Paso 12, 15, 18, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i es superior a 3 y es fácil ver que va a seguir siéndolo una y otra vez.
Ejemplo de bucle for incorrecto (1) - Paso 13, 16, 19, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
. . .
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, el bucle imprimirá una y otra vez el texto <p>número</p>
Ejemplo de bucle for incorrecto (1) - Paso 14, 17, 20, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
. . .
A continuación se ejecuta de nuevo la instrucción de paso.
En este caso, la variable $i aumentará una unidad cada vez
Ejemplo de bucle for incorrecto (1) - Paso 12, 15, 18, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 10; $i > 3; $i++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>10</p>
<p>11</p>
<p>12</p>
. . .
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i seguirá siendo siempre superior a 3, por lo que el bucle no terminará nunca.
Nota: El bucle no terminaría nunca aunque se alcanzara el valor más alto que se puede guardar en una variable de tipo entero. Al aumentar una unidad ese valor máximo, PHP pasaría la variable a tipo decimal (véase el apartado sobre variables enteras). Al no tener las variables decimales suficiente precisión, en la práctica la variable no aumentaría y mantendría siempre el mismo valor.
Ejemplo de bucle for incorrecto (2)
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de bucle for incorrecto (2) - Paso 1
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
Se ejecuta la primera instrucción del programa.
En este caso, establece el valor de la variable $j con el valor 1.
Ejemplo de bucle for incorrecto (2) - Paso 2
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecuta la siguiente instrucción.
En este caso, imprime el párrafo de comienzo (aunque el usuario sólo recibirá la página producida cuando termine el programa, cosa que no va a ocurrir)
Ejemplo de bucle for incorrecto (2) - Paso 3
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
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.
Ejemplo de bucle for incorrecto (2) - Paso 4
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
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 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (2) - Paso 5
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
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.
Ejemplo de bucle for incorrecto (2) - Paso 6
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
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 $j aumenta una unidad, por lo que ahora vale 2.
Ejemplo de bucle for incorrecto (2) - Paso 7
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
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.
Como no se ha modificado $i, si no $j, $i sigue siendo inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (2) - Paso 8
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</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 sigue teniendo el valor 1.
Ejemplo de bucle for incorrecto (2) - Paso 9
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
A continuación se ejecuta de nuevo la instrucción de paso.
En este caso, la variable $j aumenta una unidad, por lo que ahora vale 3.
Ejemplo de bucle for incorrecto (2) - Paso 10
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
Como no se ha modificado $i, si no $j, $i sigue siendo inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (2) - Paso 11
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, el bucle imprimirá una y otra vez el texto <p>1</p>
Ejemplo de bucle for incorrecto (2) - Paso 12
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se ejecuta de nuevo la instrucción de paso.
En este caso, la variable $j aumentará una unidad cada vez, por lo que ahora vale 4.
Ejemplo de bucle for incorrecto (2) - Paso 13, 16, 19, ...
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i seguirá siendo siempre inferior a 3, por lo que el bucle no terminará nunca.
Ejemplo de bucle for incorrecto (2) - Paso 14, 17, 20, ...
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, el bucle imprimirá una y otra vez el texto <p>1</p>
Ejemplo de bucle for incorrecto (2) - Paso 15, 18, 21, ...
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
A continuación se ejecuta de nuevo la instrucción de paso.
En este caso, la variable $j aumentará una unidad cada vez
Ejemplo de bucle for incorrecto (2) - Paso 13, 16, 19, ...
<?php
$j = 1;
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $j++) {
print "<p>$i</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i seguirá siendo siempre menor que 3, por lo que el bucle no terminará nunca.
Ejemplo de bucle for incorrecto (3)
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de bucle for incorrecto (3) - Paso 1
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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 (aunque el usuario sólo recibirá la página producida cuando termine el programa, cosa que no va a ocurrir)
Ejemplo de bucle for incorrecto (3) - Paso 2
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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.
Ejemplo de bucle for incorrecto (3) - Paso 3
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (3) - Paso 4
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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.
Ejemplo de bucle for incorrecto (3) - Paso 5
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
A continuación se ejecuta la siguiente instrucción del bloque.
En este caso, la variable $i disminuye una unidad, por lo que ahora vale 0.
Ejemplo de bucle for incorrecto (3) - Paso 6
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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 una unidad, por lo que ahora vale 1.
Ejemplo de bucle for incorrecto (3) - Paso 7
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
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 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (3) - Paso 8
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</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 sigue teniendo el valor 1.
Ejemplo de bucle for incorrecto (3) - Paso 9
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
A continuación se ejecuta la siguiente instrucción del bloque.
En este caso, la variable $i disminuye una unidad, por lo que ahora vale 0.
Ejemplo de bucle for incorrecto (3) - Paso 10
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</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 1.
Ejemplo de bucle for incorrecto (3) - Paso 11
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 1.
Ejemplo de bucle for incorrecto (3) - Paso 12
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, el bucle imprimirá una y otra vez el texto <p>1</p>
Ejemplo de bucle for incorrecto (3) - Paso 13
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se ejecuta la siguiente instrucción del bloque.
En este caso, la variable $i disminuye una unidad, por lo que ahora vale 0.
Ejemplo de bucle for incorrecto (3) - Paso 14
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</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 1.
Ejemplo de bucle for incorrecto (3) - Paso 15, 19, 23, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
A continuación se comprueba de nuevo si la condición de continuación se cumple.
En este caso, $i seguirá siendo siempre inferior a 3, por lo que el bucle no terminará nunca.
Ejemplo de bucle for incorrecto (3) - Paso 16, 20, 24, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
A continuación se ejecutan de nuevo las instrucciones del bloque.
En este caso, el bucle imprimirá una y otra vez el texto <p>1</p>
Ejemplo de bucle for incorrecto (3) - Paso 17, 21, 25, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</p>
<p>1</p>
. . .
A continuación se ejecuta la siguiente instrucción del bloque.
En este caso, la variable $i disminuye una unidad cada vez, por lo que siempre valdrá 0.
Ejemplo de bucle for incorrecto (3) - Paso 18, 22, 26, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i < 3; $i++) {
print "<p>$i</p>\n";
$i--;
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>1</p>
<p>1</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 cada vez, por lo que siempre valdrá 1.
Ejemplo de bucle for incorrecto (4)
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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>
. . .
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de bucle for incorrecto (4) - Paso 1
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 (aunque el usuario sólo recibirá la página producida cuando termine el programa, cosa que no va a ocurrir)
Ejemplo de bucle for incorrecto (4) - Paso 2
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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.
Ejemplo de bucle for incorrecto (4) - Paso 3
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 distinto de 4 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (4) - Paso 4
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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.
Ejemplo de bucle for incorrecto (4) - Paso 5
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 en dos unidades, por lo que ahora vale 3.
Ejemplo de bucle for incorrecto (4) - Paso 6
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 distinto de 4 (vale 3), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (4) - Paso 7
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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.
Ejemplo de bucle for incorrecto (4) - Paso 8
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 en dos unidades, por lo que pasa a valer 5.
Ejemplo de bucle for incorrecto (4) - Paso 9
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 diferente de 4 (vale 5), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de bucle for incorrecto (4) - Paso 10
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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.
Ejemplo de bucle for incorrecto (4) - Paso 11
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 en dos unidades, por lo que pasa a valer 7.
Ejemplo de bucle for incorrecto (4) - Paso 12, 15, 18, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 es distinto de 4 y es fácil ver que va a seguir siéndolo una y otra vez.
Ejemplo de bucle for incorrecto (4) - Paso 13, 16, 19, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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, el bucle imprimirá una y otra vez el texto <p>número</p>.
Ejemplo de bucle for incorrecto (4) - Paso 14, 17, 20, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 aumentará dos unidades cada vez.
Ejemplo de bucle for incorrecto (4) - Paso 12, 15, 18, ...
<?php
print "<p>Comienzo</p>\n";
for ($i = 1; $i != 4; $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 seguirá siendo siempre distinto de 4, por lo que el bucle no terminará nunca.
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.
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.
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.
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.
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.
<?php
for ($i = 0, $j = 0; $i < 5; $i++) {
print "<p>i: $i - j: $j</p>\n";
}
?>
<p>Hola</p>
<p>i: 0 - j: 0</p>
<p>i: 1 - j: 0</p>
<p>i: 2 - j: 0</p>
<p>i: 3 - j: 0</p>
<p>i: 4 - j: 0</p>
<?php
for ($i = 0, $j = 0; $i < 5; $i++, $j = $j +2) {
print "<p>i: $i - j: $j</p>\n";
}
?>
<p>Hola</p>
<p>i: 0 - j: 0</p>
<p>i: 1 - j: 2</p>
<p>i: 2 - j: 4</p>
<p>i: 3 - j: 6</p>
<p>i: 4 - j: 8</p>
<?php
for ($i = 0, $j = 0; $i < 5, $j < 13; $i++, $j = $j +2) {
print "<p>i: $i - j: $j</p>\n";
}
?>
<p>Hola</p>
<p>i: 0 - j: 0</p>
<p>i: 1 - j: 2</p>
<p>i: 2 - j: 4</p>
<p>i: 3 - j: 6</p>
<p>i: 4 - j: 8</p>
<p>i: 5 - j: 10</p>
<p>i: 6 - j: 12</p>
<?php
for ($i = 0, $j = 0; $i < 5 && $j < 13; $i++, $j = $j +2) {
print "<p>i: $i - j: $j</p>\n";
}
?>
<p>Hola</p>
<p>i: 0 - j: 0</p>
<p>i: 1 - j: 2</p>
<p>i: 2 - j: 4</p>
<p>i: 3 - j: 6</p>
<p>i: 4 - j: 8</p>