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:
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
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.
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
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:
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
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:
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.
No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.
Los reconocimientos se realizan en el apartado Fuentes de información.
Todas las capturas de pantalla tienen copyright y pertenecen a TuInsitutoOnline.com.
TuInstitutoOnline.com permite su uso siempre y cuando se muestren desde el dominio www.tuinstituoonline.com y NO PERMITE enlazar a ellas desde otros lugares.
Además, la estructura diseñada para mostrar el contenido de las unidades es propiedad de TuInstitutoOnline.com.