Objetivos Objetivos
  • Utilizar las principales estructuras repetitivas
Fuentes de información Fuentes de información
Contenidos
Contenidos
 

1.- Introducción

En la unidad anterior poníamos el énfasis en las estructuras de control y veíamos que existían dos tipos: condicionales y repetitivas. Debido a que las primeras ya han sido estudiadas, es necesario enfatizar las segundas ya que, gracias a ellas, podremos realizar acciones tantas veces como deseemos de manera sencilla y rápida.

En esta unidad se explicarán las principales sentencias repetitivas o iterativas y se mostrarán multitud de ejemplos que las ilustran.

2.- Sentencia while

Los bucles while son el tipo más sencillo de bucle en PHP y tienen el mismo comportamiento que su contrapartida en C/C++. La estructura básica de una sentencia while es:

while(expresión)

sentencia

El significado de una sentencia while es simple, ésta ejecutará las sentencias anidadas cuando la expresión se evalúe como verdadera. El valor de la expresión es verificado cada vez al inicio del bucle, por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas, la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el bucle es una iteración). En caso de que en la primera ejecución no se evaluara como verdadera la expresión, las sentencias no llegarían a ejecutarse.

Un ejemplo ilustrativo que muestra los primeros 10 números:

Como resultado obtenemos:

Al igual que con la sentencia if, se pueden agrupar varias instrucciones dentro del mismo bucle while rodeando un grupo de sentencias con llaves:

while(expresión){

sentencias

}

El siguiente ejemplo es similar al anterior pero implementado con llaves:

Y el resultado, que será el mismo que en el ejemplo anterior:

Dentro de las expresiones, tal y como comentamos en la unidad anterior, podemos utilizar varias condiciones. Por ejemplo, si queremos imprimir los primeros 20 números:

Como resultado obtenemos:

Ejercicios
Ejercicio
 

En la teoría hemos visto dos programas en los que se implementan ejemplos de utilización de la sentencia while. Créalos y almacenalos con los nombres repetitivas01.php, repetitivas02.php y repetitivas03.php. Además crea un nuevo programa (almacénalo como repetitivas04.php) en el que imprimas los 10 primeros números pares (utiliza el operador % para comprobarlo).

Contenidos
Contenidos
 

3.- Sentencia do..while

Los bucles do..while son muy similares a los bucles while, excepto que la expresión verdadera es verificada al final de cada iteración en lugar de al principio. La diferencia principal con los bucles while, por tanto, es que está garantizada la ejecución del código en la primera iteración de éste (la expresión verdadera sólo es verificada al final de la iteración), ya que si fuera un bucle while y la expresión se evaluara como falsa, jamás se ejecutaría el código.

La sintaxis para este tipo de bucles es:

do {

sentencias

}while(expresión)

Pongamos un ejemplo para ver más claramente lo explicado:

Como las sentencias del do..while se ejecutan, al menos, una vez y la condición no se cumple entonces sólo se ejecutará la primera:

Si el bucle anterior lo hubiéramos implementado con la estructura while, no se hubiera imprimido nada ya que la condición hubiera obtenido como resultado falso en la primera iteración y, automáticamente, se acabaría la ejecución del bucle.

Mostramos otro ejemplo en el que se imprimirían los números del 0 al 10:

Y el resultado:

Si observamos con detenimiento el código observaremos que la condición del do..while es que la variable i sea menor que 11, ello es debido a que la variable i aumenta en cada iteración ($i++) y, en la última, el valor de ésta será de 11, una vez imprimido su valor anterior: 10.

Ejercicios
Ejercicio
 

Implementa los ejemplos vistos en la teoría y almacénalos con los nombres repetitivas05.php y repetitivas06.php. Además crea dos nuevos programas (almacénalos como repetitivas07.php y repetitivas08.php) en los que imprimas los 50 primeros números impares y los 25 primeros números pares, respectivamente.

Contenidos
Contenidos
 

4.- Sentencia for

Los bucles for son los más complejos en PHP y se comportan, al igual que el while, como sus homólogos en C/C++. La sintaxis de un bucle for es la siguiente:

for(expresión1;expresión2;expresión3){

sentencias

}

La primera expresión cumple la función de inicializar las variables de control del bucle y es evaluada una vez incondicionalmente al comienzo del bucle.En cada una de las iteraciones, al comienzo, se evalúa la expresión 2 de modo que si su resultado es verdadero, el bucle continúa y se ejecutan las sentencias de éste, mientras que si se evalúa como falso finliza la ejecución del bucle. Además, al final de cada iteración, se ejecuta la expresión 3, la cual suele incluir el incremento/decremento de alguna de las varibles utilizadas en el for.

Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. En la expresión 2, todas las expresiones separadas por una coma son evaluadas, pero el resultado se toma de la última parte. De hecho, el caso de que ésta esté vacía significaría que el bucle se ejecutará indefinidamente, por lo que hay que tener cuidado al implementar esta parte.

Vamos a mostrar cuatro ejemplos cuyo resultado será el de imprimir los números del 1 al 10:

  • Primer ejemplo

  • Segundo ejemplo

  • Tercer ejemplo

  • Cuarto ejemplo

Y el resultado:

Si los comparamos, el primero de los ejemplos es el que tiene el código más legible y el que más se suele utilizar. Aun con ello, hemos podido ver que algunas de las expresiones del for se pueden dejar vacías para, en las sentencias del interior, realizar las comprobaciones necesarias. También, en los ejemplos 2 y 3, se puede observar la utilización del break como salida directa del bucle.

Este tipo de estructuras se suele utilizar, también, como elemento para iterar sobre vectores (Arrays). En el siguiente ejemplo se define un vector de nombres y el for se encarga de imprimirlos utilizando como índice del vector la variable i:

El resultado será la impresión de todos los amigos:

Otra de las posibilidades que tenemos con la sentencia for es la de recorrer los elementos a la inversa, de tal modo que si queremos comenzar por el último amigo y acabar por el primero:

Obteniendo como resultado:

Si lo aplicamos a los ejemplos del principio, en los que se imprimían los números del 1 al 10, podríamos imprimir los números del 10 al 1:

Tal y como muestra el resultado:


Ejercicios
Ejercicio
 

Implementa los ejemplos vistos en la teoría y almacénalos con los nombres repetitivas09.php, repetitivas10.php, repetitivas11.php, repetitivas12.php, repetitivas13.php, repetitivas14.php y repetitivas15.php. Además implementa un programa (llamado repetitivas16.php) en el que se sumen los números del 1 al 100 y muestre por pantalla el resultado. Para ello puedes utilizar una variable que vaya almacenando las sumas parciales (por ejemplo, suma) y otra que actúe de contador.

Contenidos
Contenidos
 

5.- Sentencia foreach

El constructor foreach proporciona un modo más sencillo de iterar sobre arrays que con el for visto anteriormente. Éste solamente funciona sobre arrays y objetos, y emitirá un error al intentar usarlo con una variable de un tipo diferente de datos o una variable no inicializada. Existen dos sintaxis:

foreach(expresión_array as $valor)

sentencias

o bien

foreach(expresión_array as $clave => $valor)

sentencias

La primera forma recorre el array dado por expresión_array y en cada iteración el valor del elemento actual se asigna a $valor. Además, el puntero interno del array avanza una posición de modo que en la siguiente iteración se estará sobre el siguiente elemento.

La segunda forma además asigna la clave del elemento actual a la variable $clave en cada iteración, aunque esta forma solo se suele utilizar en vectores asociativos. Es por ello que nos quedaremos con la primera de ellas.

En el siguiente ejemplo imprimimos el valor de los elementos de un array de las dos formas:

  • Primera sintaxis

  • Segunda sintaxis

En ambos casos el resultado será el mismo:

Vamos a mostrar otro ejemplo donde se imprimen los días de la semana y los estaciones:

Como resultado se muestra:


Ejercicios
Ejercicio
 

Implementa los ejemplos vistos en la teoría y almacénalos con los nombres repetitivas17.php, repetitivas18.php y repetitivas19.php. Además implementa un programa (llamado repetitivas20.php) en el que se muestren los meses del año en castellano e inglés. Para ello crea dos arrays, uno para cada idioma.

Una vez hecho comprímelo todo en un fichero llamado repetitivas.zip y súbelo a la plataforma.