De forma predeterminada, un programa sigue una ejecución secuencial de instrucciones. Si el flujo del programa se dirige hacia cualquiera de las instrucciones anteriores del programa, constituye un bucle. La instrucción for en PHP es una herramienta conveniente para constituir un bucle en un script PHP. En este capítulo, discutiremos la declaración for de PHP.

Diagrama de flujo del bucle «for»

El siguiente diagrama de flujo explica cómo funciona un bucle for:

La instrucción for se utiliza cuando se sabe cuántas veces se desea ejecutar una instrucción o un bloque de instrucciones.

Sintaxis del bucle «for»

La sintaxis de la sentencia for en PHP es similar a la de la sentencia for en lenguaje C.

for(expr1; expr2; expr3){
   code to be executed;}

La palabra clave for va seguida de un paréntesis que contiene tres expresiones separadas por un punto y coma. Cada uno de ellos puede estar vacío o contener varias expresiones separadas por comas. El paréntesis va seguido de una o más instrucciones colocadas entre llaves. Forma el cuerpo del bucle.

La primera expresión entre paréntesis se ejecuta solo al principio del bucle. Por lo general, actúa como el inicializador utilizado para establecer el valor inicial para el contador del número de iteraciones de bucle.

Al principio de cada iteración, se evalúa expr2. Si se evalúa como true, el bucle continúa y se ejecutan las instrucciones del bloque body. Si se evalúa como false, finaliza la ejecución del bucle. Por lo general, expr2 especifica el valor final del contador.

El expr3 se ejecuta al final de cada iteración. En la mayoría de los casos, esta expresión incrementa la variable de contador.

Ejemplo

El ejemplo más general de un bucle for es el siguiente:

<?php
   for ($i=1; $i<=10; $i++){
      echo "Iteration No: $i \n";
   }
?>

Aquí está su resultado:

Iteration No: 1
Iteration No: 2
Iteration No: 3
Iteration No: 4
Iteration No: 5
Iteration No: 6
Iteration No: 7
Iteration No: 8
Iteration No: 9
Iteration No: 10

Un bucle «for» infinito

Tenga en cuenta que las tres expresiones entre paréntesis son opcionales. Una instrucción for con solo dos puntos y comas constituye un bucle infinito.

for(;;){
   Loop body
}

Para detener la iteración infinita, debe usar una instrucción break dentro del cuerpo del bucle.

Un bucle «for» decremento

También puede formar un bucle for decrementante. Para tener un bucle for que vaya de 10 a 1, inicialice la variable de bucle con 10, la expresión en el medio que se evalúa al principio de cada iteración comprueba si es mayor que 1. La última expresión que se ejecutará al final de cada iteración debe disminuirla en 1.

<?php
   for ($i=10; $i>=1; $i--){
      echo "Iteration No: $i \n";
   }
?>

Producirá el siguiente resultado:

Iteration No: 10 
Iteration No: 9 
Iteration No: 8 
Iteration No: 7 
Iteration No: 6 
Iteration No: 5 
Iteration No: 4 
Iteration No: 3 
Iteration No: 2 
Iteration No: 1

El uso de la función «for… endfor»

También puede usar el símbolo «:» (dos puntos) para iniciar el bloque de bucle y poner la instrucción endfor al final del bloque.

<?php
   for ($i=1; $i<=10; $i++):
      echo "Iteration No: $i \n";
   endfor;
?>

Iteración de una matriz indexada mediante el bucle «for»

Cada elemento de la matriz se identifica mediante un índice incremental que comienza con «0». Si hay una matriz de 5 elementos, su límite inferior es 0 y su límite superior es 4 (tamaño de la matriz -1).

Para obtener el número de elementos en una matriz, hay una función count(). Por lo tanto, podemos iterar sobre una matriz indexada usando lo siguiente para la declaración:

<?php
   $numbers = array(10, 20, 30, 40, 50);

   for ($i=0; $i<count($numbers); $i++){
      echo "numbers[$i] = $numbers[$i] \n";
   }
?>

Producirá el siguiente resultado:

numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50

Iteración de una matriz asociativa mediante el bucle «for»

Un array asociativo en PHP es una colección de pares clave-valor. Se utiliza un símbolo de flecha (=>) para mostrar la asociación entre la clave y su valor. Usamos la función array_keys() para obtener una matriz de claves.

El siguiente bucle for imprime la capital de cada estado a partir de una matriz asociativa $capitals definida en el código:

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow", 
      "Tamilnadu"=>"Chennai"
   );
   $keys=array_keys($capitals);

   for ($i=0; $i<count($keys); $i++){
      $cap = $keys[$i];
      echo "Capital of $cap is $capitals[$cap] \n";
   }
?>

Aquí está su resultado:

Capital of Maharashtra is Mumbai
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai

Uso de bucles «for» anidados en PHP

Si se utiliza otro bucle for dentro del cuerpo de un bucle existente, se dice que los dos bucles se han anidado.

Para cada valor de la variable de contador del bucle externo, se completan todas las iteraciones del bucle interno.

<?php
   for ($i=1; $i<=3; $i++){
      for ($j=1; $j<=3; $j++){
         echo "i= $i j= $j \n";
      }
   }
?>

Producirá el siguiente resultado:

i= 1 j= 1
i= 1 j= 2
i= 1 j= 3
i= 2 j= 1
i= 2 j= 2
i= 2 j= 3
i= 3 j= 1
i= 3 j= 2
i= 3 j= 3

Tenga en cuenta que una cadena es una forma de matriz. La función strlen() da el número de caracteres de una cadena.

Ejemplo

El siguiente script PHP utiliza dos bucles anidados para imprimir el número creciente de caracteres de una cadena en cada línea.

<?php
   $str = "TutorialPHP";
   for ($i=0; $i<strlen($str); $i++){
      for ($j=0; $j<=$i; $j++){
         echo "$str[$j]";
      }
      echo "\n";
   }
?>

Producirá el siguiente resultado:

T
Tu
Tut
Tuto
Tutor
Tutori
Tutoria
Tutorial
Tutorials
TutorialsP
TutorialsPH
TutorialsPHP