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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow