Buscar..
Introducción
Los bucles son un aspecto fundamental de la programación. Permiten a los programadores crear código que se repite para un número determinado de repeticiones o iteraciones . El número de iteraciones puede ser explícito (6 iteraciones, por ejemplo), o continuar hasta que se cumpla alguna condición ('hasta que el infierno se congele').
Este tema cubre los diferentes tipos de bucles, sus declaraciones de control asociadas y sus posibles aplicaciones en PHP.
Sintaxis
- para (contador de inicio; contador de prueba; contador de incremento) {/ * código * /}
- foreach (matriz como valor) {/ * código * /}
- foreach (matriz como clave => valor) {/ * código * /}
- while (condición) {/ * código * /}
- hacer {/ * código * /} while (condición);
- anyloop {continuar; }
- anyloop {[ anyloop ...] {continue int; }}
- anyloop {descanso; }
- anyloop {[ anyloop ...] {break int; }}
Observaciones
A menudo es útil ejecutar el mismo bloque de código o varias veces. En lugar de copiar y pegar, los bucles de sentencias casi iguales proporcionan un mecanismo para ejecutar el código un número específico de veces y recorrer estructuras de datos. PHP soporta los siguientes cuatro tipos de bucles:
-
for
-
while
-
do..while
-
foreach
Para controlar estos bucles, continue
y las declaraciones de break
están disponibles.
para
La instrucción
for
se utiliza cuando sabe cuántas veces desea ejecutar una instrucción o un bloque de instrucciones.
El inicializador se utiliza para establecer el valor de inicio para el contador del número de iteraciones de bucle. Se puede declarar una variable aquí para este propósito y es tradicional nombrarla $i
.
El siguiente ejemplo itera 10 veces y muestra números del 0 al 9.
for ($i = 0; $i <= 9; $i++) {
echo $i, ',';
}
# Example 2
for ($i = 0; ; $i++) {
if ($i > 9) {
break;
}
echo $i, ',';
}
# Example 3
$i = 0;
for (; ; ) {
if ($i > 9) {
break;
}
echo $i, ',';
$i++;
}
# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);
La salida esperada es:
0,1,2,3,4,5,6,7,8,9,
para cada
La instrucción
foreach
se utiliza para hacer un ciclo a través de matrices.
Para cada iteración, el valor del elemento de la matriz actual se asigna a la variable $value
y el puntero de la matriz se mueve uno y en la siguiente iteración se procesará el siguiente elemento.
El siguiente ejemplo muestra los elementos en la matriz asignada.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
echo "I love to eat {$value}. ";
}
La salida esperada es:
I love to eat apple. I love to eat banana. I love to eat cherry.
También puede acceder a la clave / índice de un valor utilizando foreach:
foreach ($list as $key => $value) {
echo $key . ":" . $value . " ";
}
//Outputs - 0:apple 1:banana 2:cherry
Por defecto, $value
es una copia del valor en $list
, por lo que los cambios realizados dentro del bucle no se reflejarán en $list
después.
foreach ($list as $value) {
$value = $value . " pie";
}
echo $list[0]; // Outputs "apple"
Para modificar la matriz dentro del bucle foreach
, use el operador &
para asignar $value
por referencia. Es importante unset
la variable luego para que reusar $value
otro lugar no sobrescriba la matriz.
foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
$value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"
También puede modificar los elementos de la matriz dentro del bucle foreach
haciendo referencia a la clave de la matriz del elemento actual.
foreach ($list as $key => $value) {
$list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"
descanso
La palabra clave
break
termina inmediatamente el bucle actual.
De manera similar a la instrucción continue
, una break
detiene la ejecución de un bucle. Sin embargo, a diferencia de una instrucción de continue
, la break
provoca la terminación inmediata del bucle y no ejecuta la instrucción condicional nuevamente.
$i = 5;
while(true) {
echo 120/$i.PHP_EOL;
$i -= 1;
if ($i == 0) {
break;
}
}
Este código producirá
24
30
40
60
120
pero no ejecutará el caso donde $i
es 0, lo que resultaría en un error fatal debido a la división por 0.
La instrucción break también puede usarse para romper varios niveles de bucles. Tal comportamiento es muy útil cuando se ejecutan bucles anidados. Por ejemplo, para copiar una matriz de cadenas en una cadena de salida, eliminando cualquier #
símbolo, hasta que la cadena de salida tenga exactamente 160 caracteres
$output = "";
$inputs = array(
"#soblessed #throwbackthursday",
"happy tuesday",
"#nofilter",
/* more inputs */
);
foreach($inputs as $input) {
for($i = 0; $i < strlen($input); $i += 1) {
if ($input[$i] == '#') continue;
$output .= $input[$i];
if (strlen($output) == 160) break 2;
}
$output .= ' ';
}
El comando break 2
termina inmediatamente la ejecución de los bucles interno y externo.
hacer ... mientras
La instrucción
do...while
ejecutará un bloque de código al menos una vez, luego repetirá el ciclo siempre que la condición sea verdadera.
El siguiente ejemplo incrementará el valor de $i
al menos una vez, y continuará incrementando la variable $i
siempre que tenga un valor inferior a 25;
$i = 0;
do {
$i++;
} while($i < 25);
echo 'The final value of i is: ', $i;
La salida esperada es:
The final value of i is: 25
continuar
La palabra clave
continue
detiene la iteración actual de un bucle pero no termina el bucle.
Al igual que la instrucción break
, la instrucción continue
está situada dentro del cuerpo del bucle. Cuando se ejecuta, la instrucción continue
hace que la ejecución salte inmediatamente al bucle condicional.
En el siguiente ejemplo, el bucle imprime un mensaje basado en los valores de una matriz, pero omite un valor especificado.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
if ($value == 'banana') {
continue;
}
echo "I love to eat {$value} pie.".PHP_EOL;
}
La salida esperada es:
I love to eat apple pie.
I love to eat cherry pie.
La instrucción de continue
también se puede usar para continuar inmediatamente la ejecución a un nivel externo de un bucle especificando la cantidad de niveles de bucle para saltar. Por ejemplo, considere datos como
Fruta | Color | Costo |
---|---|---|
manzana | rojo | 1 |
Plátano | Amarillo | 7 |
Cereza | rojo | 2 |
Uva | Verde | 4 |
Para hacer solo pasteles de fruta que cuestan menos de 5.
$data = [
[ "Fruit" => "Apple", "Color" => "Red", "Cost" => 1 ],
[ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
[ "Fruit" => "Cherry", "Color" => "Red", "Cost" => 2 ],
[ "Fruit" => "Grape", "Color" => "Green", "Cost" => 4 ]
];
foreach($data as $fruit) {
foreach($fruit as $key => $value) {
if ($key == "Cost" && $value >= 5) {
continue 2;
}
/* make a pie */
}
}
Cuando se ejecuta la instrucción continue 2
, la ejecución salta inmediatamente a $data as $fruit
continúa con el bucle externo y omite todos los demás códigos (incluido el condicional en el bucle interno).
mientras
La instrucción
while
ejecutará un bloque de código siempre y cuando la expresión de prueba sea verdadera.
Si la expresión de prueba es verdadera, entonces se ejecutará el bloque de código. Después de que el código se haya ejecutado, la expresión de prueba se evaluará nuevamente y el bucle continuará hasta que se encuentre que la expresión de prueba es falsa.
El siguiente ejemplo itera hasta que la suma alcanza 100 antes de terminar.
$i = true;
$sum = 0;
while ($i) {
if ($sum === 100) {
$i = false;
} else {
$sum += 10;
}
}
echo 'The sum is: ', $sum;
La salida esperada es:
The sum is: 100