Laço for em PHP

Laços for em PHP são os mais complexos da linguagem. Você pode controlar suas ações baseando-se em três expressões: um valor inicial (opcional); uma expressão condicional (opcional); uma terceira expressão (opcional), que, normalmente, altera o valor inicial.

for ( $expressão_1; $expressão_2; $expressão_3; ) {
	// Ação
}

A primeira expressão é executada uma vez, sem condição alguma, no começo do laço. Com isso, você pode criar uma variável e dar um valor para ela utilizando essa expressão, por exemplo.

<?php
for ( $variavel = 1; $exp2; $exp3; ) {
	// Ação
}
?>

Na expressão acima, a $variavel agora tem valor 1.

A segunda expressão deverá retornar um valor verdadeiro (true) para que o laço seja executado, caso retorne um valor falso (false), o laço termina. Veja abaixo um exemplo de condição que retorna um valor verdadeiro e utiliza o valor da primeira expressão.

<?php
for ( $variavel = 1; $variavel < 10; $expressao_3 ) {
	// Ação
}
?>

Perceba que a expressão 2 avalia se $variavel (da expressão 1) é menor do que 10 ($variavel < 10). A cada volta do laço essa expressão será avaliada para que o interpretador do PHP saiba quando parar o laço. Por esse motivo, precisamos alterar o valor de $variavel para que, em algum momento, a expressão seja avaliada como falsa (false). Se não fizermos isso teremos um loop infinito.

A terceira expressão é executada incondicionalmente a cada volta do laço, com isso podemos alterar o valor da primeira expressão utilizando-a.

<?php
for ( $variavel = 1; $variavel < 10; $variavel++ ) {
	echo $variavel;
}
?>

Perceba acima que utilizando apenas o laço for, consigo criar uma variável, avaliar o valor dessa variável e alterar seu valor caso necessário. Como no trecho anterior, que criei a $variavel com valor 1, verifiquei se o valor da variável é menor do que 10 ($variavel < 10) e somei mais um ($variavel++) na variável a cada volta do laço.

Resumo das expressões de for em PHP

Só para recapitular de uma maneira mais compacta e resumida, vejamos o que cada expressão faz:

  • Expressão 1: É executada apenas uma vez no início do laço;
  • Expressão 2: Deve retornar um valor boolean verdadeiro (true) para que o laço continue; É executada a cada volta do laço;
  • Expressão 3: É executada a cada volta do laço.

Cada expressão pode estar vazia ou separada por vírgula, porém, o resultado é capturado da última parte. Para a expressão dois, ao contrário do que se imagina, um valor verdadeiro (true) é retornado quando ela estiver vazia.

Isso significa que o trecho de código abaixo está correto:

<?php
// Variável inicial
$numero = 0;

// For sem expressões
for ( ; ; ) {
	// Verifica se $número é maior que 10
	if ( $numero > 10 ) {
		// A palavra break para o laço
		// Isso evita um laço infinito
		break;
	}
	
	// Mostra o número na tela
	echo $numero;
	
	// Incrementa o número em +1
	$numero++;
}
?>

Perceba que a palavra break (significa pausa em inglês), para o laço. Por isso, tive que utilizar uma estrutura condicional if para analisar minha expressão (o mesmo que a expressão 2 do for faz) e executar o "break".

For com arrays

For também pode ser utilizado para percorrer arrays, porém, você vai precisar utilizar a função count do PHP para saber quantos itens existem nesse array, veja:

<?php
// Arrays 
$frutas = array(
	'banana',
	'maçã',
	'uva'
);

// For percorre o array
for ( $i = 0; $i < count( $frutas ); $i++ ) {
	echo 'Gosto de comer ' . $frutas[$i] . ' pela manhã <br />';
}
?>

Perceba que no trecho acima criei um array simples com 3 valores. Na expressão 1 do laço for, criei uma variável $i com valor 0, na expressão 2 verifiquei se o valor de $i é menor que o número de itens do meu array, na expressão 3, somei mais um (+1) em $i.

O valor de $i terá o seguinte caminho nesse caso:

  • 0: na primeira volta do laço (quando o valor foi criado);
  • 1: na segunda volta do laço
  • 2: na terceira volta do laço
  • Quando o valor for 3, a segunda expressão será avaliada como falsa e o laço para.

Ou seja, o trecho acima seria o mesmo que o trecho abaixo (se não houvesse o for):

<?php
// Arrays 
$frutas = array(
	'banana',
	'maçã',
	'uva'
);

echo 'Gosto de comer ' . $frutas[0] . ' pela manhã <br />';
echo 'Gosto de comer ' . $frutas[1] . ' pela manhã <br />';
echo 'Gosto de comer ' . $frutas[2] . ' pela manhã <br />';
?>

Como temos apenas poucos valores e poucas ações, não faz muita diferença se eu utilizar for ou escrever o código manualmente, porém, imagine o mesmo array com milhares de valores e várias ações dentro do laço! Seria bem inconveniente ter que escrever tudo manualmente.

Outra sintaxe para for

For também pode ser escrito da seguinte maneira:

<?php
// Arrays 
$frutas = array(
	'banana',
	'maçã',
	'uva'
);

// For percorre o array
for ( $i = 0; $i < count( $frutas ); $i++ ):
	echo 'Gosto de comer ' . $frutas[$i] . ' pela manhã <br />';
endfor;
?>

Trocar as chaves { e } por dois pontos (:) e a palavra chave endfor; não faz diferença alguma, você pode utilizar a forma que preferir para escrever.

Aulas anteriores

Veja todas as aulas, e mais, na categoria Curso de PHP do Tutsup.