Guia Linguagem PHP
5 minutos

PHP: Utilizando os operadores break e continue

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (5)  (0)

Aqui apresentamos as estruturas de controle break e continue. Com elas podemos interromper uma estrutura de repetição ou mover o cursor para a próxima iteração.

Passo 1: Como localizar um item em uma lista de dados Passo 2: ...passando pelo menor número de itens? Passo 3: Para percorrer uma lista podemos criar um laço de repetição Passo 4: Mas isso certamente fará ela ser percorrida até o final Passo 5: Para evitar isso podemos usar o comando break Passo 6: Mas, e quando queremos pular uma iteração? Passo 7: Nesse caso podemos usar o comando continue

Chamamos de fluxo de controle a ordem na qual cada declaração em um programa é interpretada e executada. Em estruturas como for, foreach, while, do-while ou switch, o fluxo de controle retorna à primeira declaração após a última ser executada, até que uma condição seja avaliada como falsa. Os comandos break e continue oferecem maior controle sobre tais estruturas, alterando o fluxo de controle para a próxima iteração ou encerrando todo ciclo de repetições.

Veremos como utilizar os comandos break e continue no PHP.

Break

Break encerra uma estrutura de repetição imediatamente. Geralmente usamos if/else para determinar o momento em que essa condição de encerramento será executada.

A sintaxe do comando do break é esta:

break;

No código abaixo encerramos a execução do while imediatamente após o contador $i alcançar o valor “3”. Como resultado serão impressos apenas os valores “1 2”, em lugar de “1 2 3 4”.

  1 $i = 0;
  2 while ($i++ < 5) {
  3     if ($i == 3) break;
  4     echo $i . "\n";
  5 }
  

RUN

Perceba que no caso acima break fez com que o laço fosse interrompido, mesmo antes da condição de encerramento $i++ < 5 ser satisfeita.

Continue

Continue pula a iteração atual, ignorando todo o código declarado abaixo dele, dentro da estrutura de repetição. Geralmente utilizamos if/else para determinar o momento em que esse comando deverá ser executado.

A sintaxe do comando continue é esta:

continue;

No código a seguir saltamos para a próxima iteração quando $i atinge o valor “3”. Como resultado o código echo $i . "\n" não imprimirá esse valor, apenas “1 2 4 5”.

  1 $i = 0;
  2 while ($i++ < 5) {
  3     if ($i == 3) continue;
  4     echo $i . "\n";
  5 }

RUN

Interrompendo vários laços

O Break aceita como argumento o número de estruturas aninhadas a serem interrompidas, sendo 1 seu valor padrão.

No código abaixo encerramos a execução de três while imediatamente após imprimir o valor “1”. Como resultado serão impressos apenas os valores “3 2 1”. Os comandos nas linhas 10 e 12 serão ignorados.

  01 $i = 0;
  02 while ($i++ < 3) {
  03     echo "3\n";
  04     while (1) {
  05         echo "2\n";
  06         while (1) {
  07             echo "1\n";
  08             break 3;
  09         }
  10         echo "Essa linha nunca vai ser exibida\n";
  11     }
  12     echo "Nem essa linha\n";
  13 }

RUN

Continue também aceita um argumento numérico opcional que diz quantos níveis de laços aninhados devem seguir para a próxima iteração. O valor padrão é 1, afetando apenas o laço em cujo escopo o comando está declarado.

No código abaixo saltamos para o início do primeiro while após imprimir o valor “1”. Como resultado serão impressos apenas os valores “3 2 1 3 2 1 3 2 1 3 2 1”. Os comandos nas linhas 10 e 12 serão, portanto, ignorados.

  01 $i = 0;
  02 while ($i++ < 3) {
  03     echo "3\n";
  04     while (1) {
  05         echo "2\n";
  06         while (1) {
  07             echo "1\n";
  08             continue 3;
  09         }
  10         echo "Essa linha nunca vai ser exibida\n";
  11     }
  12     echo "Nem essa linha\n";
  13 }

RUN

Comportamento do Switch

Diferentemente de outras linguagens, no PHP switch é considerada uma estrutura de repetição. Portanto, se switch está dentro de um for, ou qualquer outra estrutura de repetição, continue 2 também afetará o fluxo de execução em mais de um nível.

Como exemplo, no código abaixo os comandos continue 2 e break 2 impedirão que o valor “X” seja impresso em todas as iterações de while. Como resultado serão impressos apenas os valores “1a X 2c 3e X 4g”.

  01 $i = 0;
  02 while ($i++ < 4) {
  03     switch ($i) {
  04          case 1:
  05                echo $i . "a\n";
  06                continue;
  07                echo $i . "b\n";
  08          case 2:
  09                echo $i . "c\n";
  10                continue 2;
  11                echo $i . "d\n";
  12          case 3:
  13                echo $i . "e\n";
  14                break;
  15                echo $i . "f\n";
  16          case 4:
  17                echo $i . "g\n";
  18                break 2;
  19                echo $i . "h\n";
  20    }
  21    echo "X\n";
  22 }

RUN

Exemplo prático

No código a seguir apresentamos como buscar um funcionário pelo seu id, encerrando o foreach após esse valor ser encontrado. Dessa forma impedimos que todo o array seja processado desnecessariamente, poupando recursos.

  01. <?php
  02. $funcionarios = array(
  03.   array('id' => 1, 'nome' => 'João', 'salario' => 5000),
  04.   array('id' => 22, 'nome' => 'Mauro', 'salario' => 560),
  05.   array('id' => 8, 'nome' => 'Alice', 'salario' => 4300),
  06.   );
  07.  
  08. foreach ($funcionarios as $i => $funcionario) {
  09.   if ($funcionario['id'] == 22) {
  10.         $busca = $funcionario;
  11.         break;
  12.   }
  13. }
  14.  
  15. if (isset($busca)) {
  16.   echo "Funcionário encontrado: {$busca['nome']} - {$busca['id']}";
  17. } else {
  18.   echo "Funcionário não encontrado";
  19. }
  20. ?>

RUN

A seguir vemos como aplicar uma bonificação de 10% a funcionários com salário menor que R$5000,00, durante a iteração de todos os dados em um array. Logo após, são impressos os dados com o resultado de cada soma e o nome do funcionário.

  01. <?php
  02. $funcionarios = array(
  03.   array('id' => 1, 'nome' => 'João', 'salario' => 5000),
  04.   array('id' => 22, 'nome' => 'Mauro', 'salario' => 560),
  05.   array('id' => 8, 'nome' => 'Alice', 'salario' => 4300),
  06.   );
  07.  
  08. foreach ($funcionarios as $i => $funcionario) {
  09.   if ($funcionario['salario'] >= 5000) {
  10.         continue;
  11.   }
  12.  
  13.   $funcionarios[$i]['salario'] = $funcionario['salario'] + ($funcionario['salario'] * 0.1);
  14. }
  15.  
  16. foreach ($funcionarios as $funcionario) {
  17.   echo $funcionario["nome"]." $".$funcionario["salario"]."\n";
  18. }
  19. ?>

RUN
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?