· Estructuras Repetitivas
o While
Los bucles while son el tipo más sencillo de bucle en
PHP. Se comportan igual que su contrapartida en C. La forma básica de una
sentencia while es:
while (expr)
sentencia
El significado de una sentencia while es simple. Le
dice a PHP que ejecute las sentencias anidadas, tanto como la expresión while
se evalúe como TRUE. 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). A veces, si la expresión while se evalúa como FALSE desde el
principio, las sentencias anidadas no se ejecutarán ni siquiera una vez.
Al igual que con la sentencia if, se pueden agrupar
varias instrucciones dentro del mismo bucle while rodeando un grupo de
sentencias con corchetes, o utilizando la sintaxis alternativa:
while (expr):
sentencias
...
endwhile;
o 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 que al principio. La diferencia principal con los bucles
while es que está garantizado que corra la primera iteración de un bucle
do-while (la expresión verdadera sólo es verificada al final de la iteración),
mientras que no necesariamente va a correr con un bucle while regular (la
expresión verdadera es verificada al principio de cada iteración, si se evalúa
como FALSE justo desde el comienzo, la ejecución del bucle terminaría
inmediatamente).
Hay una sola sintaxis para bucles do-while:
<?php
$i =
0;
do {
echo $i;
}
while ($i > 0);
?>
El bucle de arriba se ejecutaría exactamente una sola
vez, ya que después de la primera iteración, cuando la expresión verdadera es
verificada, se evalúa como FALSE ($i no es mayor que 0) y termina la ejecución
del bucle.
Los usuarios avanzados de C pueden estar
familiarizados con un uso distinto del bucle do-while, para permitir parar la
ejecución en medio de los bloques de código, mediante el encapsulado con
do-while (0), y utilizando la sentencia break.
o For
Los bucles for son los ciclos más complejos en PHP. Se
comportan como sus contrapartes en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3)
sentencia
La primera expresión (expr1) es evaluada (ejecutada)
una vez incondicionalmente al comienzo del bucle.
En el comienzo de cada iteración, la expr2 es
evaluada, Si es TRUE, el bucle continúa y las sentencias anidadas son
ejecutadas. Si se evalúa como FALSE, termina la ejecución del bucle.
Al final de cada iteración, la expr3 es evaluada
(ejecutada).
Cada una de las expresiones puede estar vacía o
contener múltiples expresiones separadas por comas. En la expr2, todas las
expresiones separadas por una coma son evaluadas pero el resultado se toma de
la última parte. Que la expr2 esté vacía significa que el bucle deberá ser
corrido indefinidamente (PHP implícitamente lo considera como TRUE, como en C).
Esto puede no ser tan inútil como se pudiera pensar, ya que muchas veces se
quiere terminar el bucle usando una sentencia condicional break en lugar de
utilizar la expresión verdadera del for.
o ForEach
El constructor foreach proporcina un modo sencillo de
iterar sobre arrays. foreach funciona sólo 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
foreach (expresión_array as $clave => $valor)
sentencias
La primera forma recorre el array dado por
expresión_array. En cada iteración, el valor del elemento actual se asigna a
$valor y el puntero interno del array avanza una posición (así en la próxima
iteración se estará observando el siguiente elemento).
La segunda forma además asigna la clave del elemento
actual a la variable $clave en cada iteración.
También es posible personalizar la iteración de
objetos.
Nota: Cuando foreach inicia su ejecución, el puntero interno del array se pone automáticamente en el primer elemento del array. Esto significa que no es necesario llamar la función reset() antes de un bucle foreach.
Ya que
foreach depende el puntero de array interno, cambiar éste dentro del bucle
puede conducir a un comportamiento inesperado.
Para poder modificar directamente los elementos del
array dentro de bucle, se ha de anteponer & a $valor. En este caso el valor
será asignado por referencia.
<?php
$array = array(1, 2, 3, 4);
foreach ($array as &$valor) {
$valor =
$valor * 2;
}
// $array ahora es array(2, 4, 6, 8)
unset($valor); // rompe la referencia con el último
elemento
?>
No hay comentarios:
Publicar un comentario