La forma más fácil de crear un bucle en un script PHP es con la construcción while. La sintaxis del bucle while en PHP es similar a la del lenguaje C. El bloque de cuerpo del bucle se ejecutará repetidamente siempre que la expresión booleana de la instrucción while sea verdadera.

El siguiente diagrama de flujo ayuda a comprender cómo funciona el bucle while en PHP:

El valor de la expresión se comprueba cada vez al principio del bucle. Si la expresión while se evalúa como falsa desde el principio, el bucle ni siquiera se ejecutará una vez. Incluso si la expresión se vuelve falsa durante la ejecución del bloque, la ejecución no se detendrá hasta el final de la iteración.

La sintaxis del bucle while se puede expresar de la siguiente manera:

while(expr){
   statements
}

Ejemplo

El siguiente código muestra un ejemplo simple de cómo funciona el bucle while en PHP. La variable $x se inicializa en 1 antes de que comience el bucle. Se pide al cuerpo del bucle que se ejecute siempre que sea menor o igual que 10. La instrucción echo en el cuerpo del bucle imprime el número de iteración actual e incrementa el valor de x, de modo que la condición se convertirá en falsa eventualmente.

<?php
   $x = 1;

   while ($x<=10) {
      echo "Iteration No. $x \n";
      $x++;
   }
?>

Producirá el siguiente 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

Tenga en cuenta que la condición de prueba se comprueba al principio de cada iteración. Incluso si la condición se vuelve falsa dentro del bucle, la ejecución no se detendrá hasta el final de la iteración.

Ejemplo

En el ejemplo siguiente, «x» se incrementa en 3 en cada iteración. En la tercera iteración, «x» se convierte en 9. Dado que la condición de prueba sigue siendo verdadera, tiene lugar la siguiente ronda en la que «x» se convierte en 12. A medida que la condición se vuelve falsa, el bucle se detiene.

<?php
   $x = 0;
   while ($x<=10){
      $x+=3;
      echo "Iteration No. $x \n";            
   }
?>

Producirá el siguiente resultado:

Iteration No. 3
Iteration No. 6
Iteration No. 9
Iteration No. 12

Ejemplo

No siempre es necesario que la variable de bucle se incremente. Si el valor inicial de la variable de bucle es mayor que el valor en el que se supone que debe terminar el bucle, entonces debe disminuirse.

<?php
   $x = 5;
   while ($x>0) {
      echo "Iteration No. $x \n";
      $x--;
   }
?>

Producirá el siguiente resultado:

Iteration No. 5 
Iteration No. 4 
Iteration No. 3 
Iteration No. 2 
Iteration No. 1

Iterar una matriz con «while»

Un array indexado en PHP es una colección de elementos, cada uno de los cuales se identifica mediante un índice incremental a partir de 0.

Puede recorrer una matriz constituyendo un bucle while accediendo repetidamente al elemento en el índice x-ésimo hasta que «x» alcance la longitud de la matriz. Aquí, «x» es una variable de contador, incrementada con cada iteración. También necesitamos una función count() que devuelva el tamaño de la matriz.

Ejemplo

Echa un vistazo al siguiente ejemplo:

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

   while ($x<$size) {
      echo "Number at index $x is $numbers[$x] \n";
      $x++;
   }
?>

Producirá el siguiente resultado:

Number at index 0 is 10
Number at index 1 is 20
Number at index 2 is 30
Number at index 3 is 40
Number at index 4 is 50

Bucles «while» anidados

Puede incluir un bucle while dentro de otro bucle while. Tanto los bucles while externos como los internos están controlados por dos variables separadas, que se incrementan después de cada iteración.

Ejemplo

<?php
   $i=1;
   $j=1;

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

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 «j», que es la variable de contador para el bucle while interno, se reinicializa a 1 después de tomar todos los valores, de modo que para el siguiente valor de «i», «j» nuevamente comienza desde 1.

Recorrer los caracteres de una cadena

En PHP, una cadena puede considerarse como una colección indexada de caracteres. Por lo tanto, un bucle while con una variable de contador que va desde «0» hasta la longitud de la cadena se puede usar para obtener un carácter a la vez.

Ejemplo

En el ejemplo siguiente se cuenta el número de vocales de una cadena determinada. Usamos strlen() para obtener la longitud y str_contains() para comprobar si el carácter es una de las vocales.

<?php
   $line = "PHP is a popular general-purpose scripting language that is especially suited to web development.";
   $vowels="aeiou";
   $size = strlen($line);
   $i=0;
   $count=0;

   while ($i<$size){
      if (str_contains($vowels, $line[$i])) {
         $count++;
      }
      $i++;
   }
   echo "Number of vowels = $count";
?>

Producirá el siguiente resultado:

Number of vowels = 32

Uso de la instrucción «endwhile»

PHP también te permite usar una sintaxis alternativa para el bucle while. En lugar de agrupar más de una instrucción entre llaves, el cuerpo del bucle se marca con un símbolo «:» (dos puntos) después de la condición y la instrucción endwhile al final.

Ejemplo

<?php
   $x = 1;
   while ($x<=10):
      echo "Iteration No. $x \n";
      $x++;
   endwhile;
?>

Producirá el siguiente 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

Tenga en cuenta que la instrucción endwhile termina con un punto y coma.