foreach
O "foreach" é uma estrutura de repetição em PHP usada para iterar sobre arrays e objetos. Conheça sua sintaxe e uso.
O Loop foreach em PHP
foreach é o loop dedicado do PHP para iterar sobre arrays e objetos. Ao contrário de um loop for, ele não precisa de um contador ou índice — percorre cada elemento automaticamente, um de cada vez, tornando-se a forma mais comum e menos propensa a erros de processar uma coleção em PHP.
Este capítulo abrange as duas formas do foreach, iteração por referência, desestruturação de arrays aninhados com list(), a armadilha mais comum e quando usar foreach em vez dos outros loops PHP.
Sintaxe
O foreach tem duas formas.
Apenas valor — quando você só precisa do valor de cada elemento:
foreach ($array as $value) {
// do something with $value
}Chave e valor — quando você também precisa da chave do array (essencial para arrays associativos):
foreach ($array as $key => $value) {
// do something with $key and $value
}Em cada passagem, o PHP copia o elemento atual em $value (e sua chave em $key), depois avança para o próximo elemento até que o array seja esgotado.
Iterando um array indexado
Iterando um array associativo
Com a forma $key => $value você obtém ambas as partes de cada par:
<?php
$person = ["name" => "John", "age" => 30, "city" => "New York"];
foreach ($person as $key => $value) {
echo $key . ": " . $value . PHP_EOL;
}
// Output:
// name: John
// age: 30
// city: New YorkModificando valores por referência
Por padrão, $value é uma cópia, portanto alterá-lo dentro do loop não afeta o array original. Prefixe-o com & para iterar por referência e gravar as alterações de volta:
<?php
$prices = [10, 20, 30];
foreach ($prices as &$price) {
$price *= 2; // modifies the array in place
}
unset($price); // important: break the reference
print_r($prices);
// Output:
// Array
// (
// [0] => 20
// [1] => 40
// [2] => 60
// )Atenção: sempre use
unset($price)após um loop por referência. A variável ainda aponta para o último elemento, então uma atribuição posterior a$price— ou um segundoforeachreutilizando o nome — corromperia silenciosamente o array.
Desestruturando arrays aninhados com list()
Quando cada elemento é em si um array, você pode desestruturá-lo inline usando list() (ou a sintaxe curta [] no PHP 7.1+):
<?php
$points = [[1, 2], [3, 4], [5, 6]];
foreach ($points as [$x, $y]) {
echo "x=$x, y=$y" . PHP_EOL;
}
// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6Quando usar foreach
- Use
foreachpara qualquer array ou iterável onde você deseja todos os elementos — é a escolha mais clara e não pode ultrapassar o fim do array. - Use um loop
forquando precisar de controle fino sobre o contador (pular, avançar de 2 em 2, contagem regressiva). - Use
whilequando o número de iterações não é conhecido antecipadamente e depende de uma condição.
Você também pode sair de um foreach antecipadamente com break ou pular uma iteração com continue, exatamente como em outros loops.