W3docs

Bucles en PHP con la sentencia Break

En PHP, break detiene un bucle antes de tiempo y continue omite la iteración actual. Aprende a usarlos, incluyendo break N y continue N para bucles anidados.

Cuando escribes un bucle en PHP, a menudo necesitas un control más preciso que "ejecutar cada iteración". Dos sentencias te dan ese control: break sale del bucle antes de tiempo, y continue omite el resto de la iteración actual. Esta página cubre ambas, incluyendo cómo aplicarlas a bucles anidados con break N y continue N.

Entendiendo la sentencia Break

La sentencia break termina inmediatamente el bucle actual (o switch) y transfiere el control a la primera sentencia después del bucle. Úsala cuando hayas encontrado lo que buscabas, o cuando continuar sería inútil o inseguro — por ejemplo, al encontrar un registro coincidente o al detectar una condición de error.

break funciona dentro de bucles for, foreach, while y do...while, así como dentro de una sentencia switch.

Nota: Usar break fuera de un bucle o una sentencia switch provoca un error fatal en PHP.

Usando la sentencia Break en un bucle For

En un bucle for, la sentencia break se puede usar para detener el bucle cuando se cumple una condición específica. Por ejemplo, el siguiente código usa un bucle for para buscar un número en un array:

Ejemplo PHP de break en un bucle for

php— editable, runs on the server

En este código, el bucle se detendrá en cuanto el valor de $numbers[$i] sea igual a 3. La salida de este código será "Found 3 at index 2".

Usando la sentencia Break en un bucle Foreach

En un bucle foreach, la sentencia break funciona de manera similar al bucle for. El siguiente código usa un bucle foreach para buscar un valor específico en un array asociativo:

Ejemplo PHP de break en un bucle foreach

php— editable, runs on the server

En este código, el bucle se detendrá en cuanto la clave $color sea igual a "green". La salida de este código será "green has hex code #00FF00".

Salir de bucles anidados

La sentencia break también puede usarse para salir de bucles anidados. Cuando se usa una sentencia break dentro de un bucle anidado, solo se termina el bucle más interno.

Por ejemplo, el siguiente código usa dos bucles anidados para buscar un valor específico en un array bidimensional:

Ejemplo PHP de break en bucles anidados

php— editable, runs on the server

En este código, la sentencia break 2 se usa para salir de dos niveles de anidamiento. La salida de este código será Found 5 at [1][1].

El número que sigue a break indica cuántos bucles envolventes se deben abandonar, no un índice de bucle. break 1 es equivalente a un break simple, y el número no puede ser mayor que la profundidad de anidamiento real.

Entendiendo la sentencia Continue

Mientras que break sale del bucle por completo, continue solo omite el resto de la iteración actual y salta directamente a la siguiente. El bucle en sí continúa ejecutándose. Esta es la opción natural cuando quieres ignorar algunos elementos pero seguir procesando el resto.

El siguiente bucle imprime todos los números del 1 al 10 excepto los pares:

Ejemplo PHP de continue en un bucle for

<?php

for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 == 0) {
        continue; // skip even numbers
    }
    echo "$i ";
}

?>

La salida es 1 3 5 7 9 — cuando $i es par, continue omite el echo y el bucle pasa al siguiente valor.

Continue en un bucle Foreach

continue es especialmente útil en un bucle foreach cuando quieres filtrar elementos sobre la marcha. Aquí omitimos cualquier producto que esté agotado:

Ejemplo PHP de continue en un bucle foreach

<?php

$products = array(
    array("name" => "Pen",      "stock" => 12),
    array("name" => "Notebook", "stock" => 0),
    array("name" => "Eraser",   "stock" => 5),
);

foreach ($products as $product) {
    if ($product["stock"] === 0) {
        continue; // don't list sold-out items
    }
    echo $product["name"] . " (" . $product["stock"] . " in stock)\n";
}

?>

Esto imprime Pen y Eraser, omitiendo el Notebook agotado.

Saltar múltiples niveles con continue N

Al igual que break N, continue N salta a la siguiente iteración de un bucle exterior. continue 2, por ejemplo, reinicia el bucle un nivel más arriba:

Ejemplo PHP de continue 2 en bucles anidados

<?php

for ($i = 1; $i <= 3; $i++) {
    for ($j = 1; $j <= 3; $j++) {
        if ($j == 2) {
            continue 2; // jump to the next $i
        }
        echo "i=$i j=$j\n";
    }
}

?>

El bucle interno solo imprime j=1, porque al llegar a j == 2 se reinicia el bucle exterior. La salida es i=1 j=1, i=2 j=1, i=3 j=1.

Break vs. Continue

SentenciaEfecto
breakDetiene el bucle por completo; la ejecución continúa después del bucle.
continueOmite el resto de la iteración actual; el bucle continúa.
break NSale de N bucles anidados a la vez.
continue NSalta a la siguiente iteración del bucle N niveles más arriba.

Errores comunes

  • continue en un bucle do...while sigue evaluando la condición. No omite la comprobación de la condición, por lo que el bucle puede terminar después de un continue.
  • continue se comporta de manera diferente dentro de switch. Dentro de un switch que está dentro de un bucle, continue actúa como break para el switch y emite una advertencia en versiones modernas de PHP. Usa break para salir del switch y reserva continue para el bucle circundante.
  • Los errores de uno en uno con continue en un bucle for son poco frecuentes porque el incremento de la sentencia for se ejecuta normalmente — pero en un bucle while debes actualizar el contador antes de continue, o puedes crear un bucle infinito.

Conclusión

Las sentencias break y continue te dan un control preciso sobre la ejecución de los bucles: break sale de un bucle antes de tiempo, mientras que continue omite una iteración y sigue adelante. Las formas break N y continue N extienden ese control a través de bucles anidados. A continuación, revisa cómo funcionan los distintos tipos de buclefor, foreach, while y do...while.

Práctica

Práctica
En PHP, ¿cuál es la función principal de las sentencias 'break' y 'continue'?
En PHP, ¿cuál es la función principal de las sentencias 'break' y 'continue'?
Was this page helpful?