Vamos falar desde os loops mais básicos do PHP até loops por funções nativas, pretendo explorar tanto desempenho quanto a forma de utilizar esses loops.
Sem mais enrolações vamos aos tipos de loop nativo.
Executa um bloco de comandos enquanto a condicional é verdadeira.
Vamos ao exemplo de um loop com WHILE de forma simples e didática.
$contador = 0;
while($contador<3)
{
echo 'contador='. $contador. '<br>';
$contador++;
}
Vamos as explicações:
while é o comando para iniciar o bloco de repetição e passa-se a condicional para ele no meu caso enquanto o contador for menor que 3. Você pode fazer loop infinito se não tomar cuidado com a condicional por exemplo while(true) com certeza vai travar o servidor / computador que está rodando o loop.
Entre as chaves é o bloco de comando que vai ser repetido até a condicional retornar false.
Também pode utilizar-se da colon syntax como no exemplo abaixo:
while(condicao):
statement;
...
endwhile;
Esse é o loop mais complexo de todos.
O for ele pode incrementar, decrementar, utilizar expressões mais avançadas para calcular o movimento do mesmo como sempre multiplicar por 2 e etc...
A forma de expressão dele é a sua capacidade de imaginar para solucionar um determinado problema X, talvez não tenha ficado muito claro mas irá ficar com os exemplos abaixo:
Sintaxe:
for(exp 1; exp 2; exp 3){
//bloco de comando
}
expressão 1, expressão 2 e expressão 3 podem ter inúmeras possibilidades.
Exemplo simples:
for($i=0; $i<10; $i++)
{
//será executado 10x do número 0 ao 9
echo 'i='. $i. '<br>';
}
ou assim
for($i=0; $i<=10; $i++)
{
//será executado 11x do número 0 ao 11
echo 'i='. $i. '<br>';
}
Também pode ser executado conforme decrementa:
for($i=10; $i>0; $i--)
{
//será executado 10x do 10 ao 1
echo 'i='. $i. '<br>';
}
Omitindo a segunda expressão exp 2:
for($i=0; ; $i++)
{
if($i==10)
break;
echo 'i='. $i. '<br>';
}
Omitindo expressões:
$i=0;
for( ; ; )
{
if($i++ == 10)
break;
echo 'i='. $i. '<br>';
}
Mais complexo:
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
Vou mostrar uma forma de fazer potência com for, "sei que existe funções da linguagem que o fazem, mas quero pra exemplificar um for mais robusto!".
function potencia(float $base, float $expoente) : float
{
for($p=1, $val=$base; $p<$expoente; $p++, $val =$val * $base );
return $val;
}
echo potencia(2, 3); //resultará em 8
Também pode utilizar-se da colon syntax como no exemplo abaixo:
for(exp1; exp2;exp3):
statement;
...
endfor;
Foreach é um loop que simplifica a forma de trabalhar com arrays e objetos, e somente trabalha com esses tipos caso tente trabalhar com outros tipos vai apresentar um erro.
O foreach vai andar por cada elemento dentro duma array disponibilizando o valor da dimensão atual da array e a chave.
Vou mostrar 2 exemplos:
Com chaves:
$arr = ['chave' => 'valor', 'chave_2' => 'valor 2'];
foreach($arr as $k => $v)
{
echo 'chave='. $k. ' e valor='. $v. '<br>';
}
Sem chaves:
$arr = ['chave' => 'valor', 'chave_2' => 'valor 2'];
foreach($arr as $v)
{
echo valor='. $v. '<br>';
}
Nesse caso acima mesmo contendo uma chave especificada para cada valor ela será omitida no foreach.
foreach($arr as $v)
{
echo 'valor='. $v. '<br>';
}
Também pode utilizar-se da colon syntax como no exemplo abaixo:
foreach($array as $v):
statement;
...
endforeach;
Também existem funções que podem ser exploradas, não vou abordar aqui pois ficaria demasiadamente extenso porém vale além de citar aqui apontar a documentação oficial.
array_map: https://www.php.net/manual/en/function.array-map.php
array_reduce: https://www.php.net/manual/en/function.array-reduce.php
array_walk: https://www.php.net/manual/en/function.array-walk.php
array_walk_recursive: https://www.php.net/manual/en/function.array-walk-recursive.php
Também existem classes que podem ser utilizadas como loop como ArrayIterator, PHP é uma linguagem bem completa e com muito recurso!
O laço do-while é similar ao laço while com a diferença de que a expressão condicional é verificada no final de cada iteração em vez de no começo.
Ou seja no while ele primeiro valida a expressão e depois executa e no do-while ele primeiro executa o bloco e depois valida a expressão.
Vamos a alguns exemplos:
$contador = 0;
do {
echo 'contador atual é: '. ($contador++). '<br>';
} while($contador < 3);
Dentro de loops é possível utilizar alguns recursos como por exemplo:
break: o break faz com que o loop termine imediatamente.
continue: o continue pula a posição atual para a próxima caso não exista termina o loop.
Também é possível fazer continue e break superior quando se tem um loop dentro de outro loop vou citar um exemplo simples com 2 loops diferentes.
$arr = [1,2,3];
foreach($arr as $n)
{
for($i=3; $i>0; $i--){
if($i==1)
{
continue 1;
}
echo 'i='. $i. ' e n='. $n. '<br>';
}
}
O mesmo vale para o break.
Lembrando que aqui são exemplos nada muito aprofundado mais para apresentação do conteúdo, loops são extremamentes importantes na programação.
O loop nada mais é do que executar diversas vezes um bloco de comando até que uma determinada tarefa seja satisfeita, já usei loops em diversas situações no meu tempo de experiência em programação, antes de no javascript existir o recurso closest, eu utilizei do while para procurar elementos superiores através do parentNode e só parava quando chegava na tag documentElement ou encontra-se a tag que eu buscava.
Os loops são antigos e estão presentes em basicamente todas as linguagens de programação.
Espero que esse artigo possa ajudar a todos, deixem seus comentários, dêem sugestões para novos conteúdos, compartilhem com seus amigos iniciante isso me ajuda muito e com certeza ajudará muito seu amigo iniciante.
Agradeço profundamente por ter chego até aqui.
Nos vemos no próximo artigo! Até mais!
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp
25/04/2024 02:13ZJjo
bWYp,,)"'.(,,)
25/04/2024 02:14ZJjo
bWYp'zAfDtG<'">hGtvNK
25/04/2024 02:14ZJjo
bWYp AND (SELECT 6794 FROM (SELECT(SLEEP(5)))zdiF)
25/04/2024 02:14ZJjo
bWYp
25/04/2024 02:14ZJjo,"((..(.,'
bWYp
25/04/2024 02:14ZJjo'POeVVA<'">DCGZsK
bWYp
25/04/2024 02:14ZJjo') AND (SELECT 6557 FROM (SELECT(SLEEP(5)))YZiC) AND ('EoCv'='EoCv
bWYp
25/04/2024 02:14ZJjo' AND (SELECT 6557 FROM (SELECT(SLEEP(5)))YZiC) AND 'xjzo'='xjzo
bWYp
25/04/2024 02:14ZJjo) AND (SELECT 6557 FROM (SELECT(SLEEP(5)))YZiC) AND (8955=8955
bWYp
25/04/2024 02:14ZJjo AND (SELECT 6557 FROM (SELECT(SLEEP(5)))YZiC)