Laço foreach em PHP

Existem vários modos para percorrer arrays, no entanto, nenhum deles é mais simples do que utilizando o laço foreach em PHP. Este comando funciona só com arrays e objetos, e retorna um erro quando utilizado com outros tipos de expressões.

O laço foreach pode ser utilizado em dois formatos diferentes, uma mais simples:

foreach ( $meu_array as $valor_do_array ) {
	echo $valor_do_array;
}

No formato indicado acima, a variável "$valor_do_array" automaticamente recebe o valor de cada item do array, por exemplo:

<?php
/* O array */
$meu_array = array(
	'Valor 1',
	'Valor 2',
	'Valor 3',
	'Valor 4'
);

/* O laço foreach simples */
foreach ( $meu_array as $seu_valor ) {
	echo $seu_valor . '<br>';
}
?>

O trecho de código acima vai mostrar todos os valores de todos os itens do array, ou seja:

Valor 1
Valor 2
Valor 3
Valor 4

O outro formato que pode ser utilizado com o comando foreach é o seguinte:

foreach ( $meu_array as $chave_do_indice => $valor_do_indice ) {
	echo $chave_do_indice;
	echo $valor_do_indice;
}

No formato mais avançado, ao invés de obter apenas o valor, você pode configurar duas variáveis. A primeira será a chave do índice e a segunda o valor desse mesmo índice. A cada volta do laço, foreach pega um item do seu array na ordem em que ele estiver, começando pelo primeiro.

Caso você queira alterar o valor do seu array dentro de um laço foreach, é necessário passar o valor por referência, veja:

<?php
/* O array */
$meu_array = array(
	'Valor 1',
	'Valor 2',
	'Valor 3',
	'Valor 4'
);

echo '<pre>';
print_r( $meu_array );
echo '</pre>';

/*
Array
(
    [0] => Valor 1
    [1] => Valor 2
    [2] => Valor 3
    [3] => Valor 4
)
*/

/* O laço foreach simples */
foreach ( $meu_array as $chave_do_indice => &$valor_do_indice ) {
	$valor_do_indice = $valor_do_indice . '  Valor alterado.';
}

echo '<pre>';
print_r( $meu_array );
echo '</pre>';

/*
Array
(
    [0] => Valor 1  Valor alterado.
    [1] => Valor 2  Valor alterado.
    [2] => Valor 3  Valor alterado.
    [3] => Valor 4  Valor alterado.
)
*/
?>

Perceba acima que o valor do meu array foi alterado dentro do laço foreach, e para que isso se tornasse possível, só precisei adicionar um & (E comercial) antes do valor, fazendo a expressão ficar assim:

foreach ( $array as $chave => &$valor ) {
	$valor = 'Agora o valor é alterado';
}

Nota: Isso se chama passar o valor "por referência".

A palavra break e o laço foreach

O laço foreach vai navegar por todos os itens do seu array, independente da quantidade. Caso você queira parar um laço antes que ele tenha passado por todos os itens do array, a palavra break pode ser utilizada.

<?php
// O laço foreach contaria até 17
foreach ( array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17) as $n ) {
	// Verifica se o valor é maior que 5
	if ( $n > 5 ) {
		// Para o laço antes que ele termine
		break;
	}
	
	// Imprime o número
	echo $n;
}
?>

No trecho de código acima, o laço foreach contaria todos os 17 itens do array, porém, como estou utilizando uma estrutura condicional if para saber se o valor é maior que 5 e mostrando a palavra break caso verdadeiro, assim que o valor de $n for maior do que 5 o laço vai parar.

Algumas considerações sobre o laço foreach

  • Quando o foreach inicia sua primeira execução, ele automaticamente começa a contagem do primeiro item do array. Isso significa que você não precisa chamar a função reset() antes de um loop foreach
  • O operador de controle de erros @ não funciona dentro de um laço foreach
  • Para alterar o valor de um array dentro de um laço foreach, é necessário passar o valor por referência (com um & antes);
  • Foreach só funciona com arrays e objetos, nada mais;

Outra sintaxe

Assim como várias outras partes da linguagem PHP, foreach também pode ser escrito de outra maneira, veja:

foreach ($array as $value):
	echo $value;
endforeach;

Ou seja, as chaves { e }, podem ser trocadas por dois pontos (:) e a palavra chave endforeach;.

Saiba mais

Você sempre poderá saber mais sobre o comando foreach em PHP no próprio manual da linguagem, não deixe de acessar e ler. Se achar algo muito complicado, volte e pergunte.

Aulas anteriores

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