PHP foreach: percorrer arrays com chave-valor
PHP foreach é a forma idiomática de percorrer um array ou um objeto que implementa Traversable, sem controlar índices manualmente. Use foreach ($array as $key => $value) quando precisar da chave e do valor em cada iteração. Para atualizar valores no próprio array, itere por referência (&$value) e execute unset() na variável do loop depois para evitar sobrescritas acidentais.
Exemplo de PHP foreach para iteração chave-valor
Saída:
A saída aparecerá aqui...
Saída:
maçã: $1.2
pão: $2.5
leite: $0.99
Como este exemplo funciona
$precosé um array associativo que mapeia nomes de produtos para preços.foreach ($precos as $item => $preco)atribui a chave atual a$iteme o valor atual a$precoem cada iteração, sem índice manual nemcount().- Cada iteração imprime o par chave-valor.
foreachlida com arrays indexados e associativos usando a mesma sintaxe.
Erros comuns com PHP foreach
Esquecer unset() depois de um loop por referência
Errado:
foreach ($itens as &$item) {
$item = strtoupper($item);
}
foreach ($itens as $item) {} // sobrescreve o último elemento
Certo:
foreach ($itens as &$item) {
$item = strtoupper($item);
}
unset($item);
Depois de um foreach por referência, a variável do loop ainda aponta para o último elemento. Reutilizar essa variável pode modificar o último elemento em vez do valor local do loop.
Esperar que loops por valor modifiquem o array
Errado:
foreach ($precos as $preco) {
$preco *= 1.10; // modifica uma cópia, não o array
}
Certo:
foreach ($precos as &$preco) {
$preco *= 1.10;
}
unset($preco);
A iteração por valor dá a cada $preco uma cópia do elemento. As alterações nessa cópia nunca chegam ao array original.
PHP foreach vs loop for
| foreach | for |
|---|---|
| Não precisa de variável de índice, deixando o percurso completo mais limpo. | É necessário quando você precisa de cálculos com índice, incrementos de passo ou percurso reverso. |
Funciona com arrays associativos e objetos Traversable. | Funciona apenas com índices numéricos; chaves associativas exigem array_keys(). |
| É menos conveniente para avançar em passos fixos (por exemplo, um item sim e outro não). | Se encaixa naturalmente em $i += 2 ou contagem regressiva. |
Use foreach para percursos padrão de arrays completos. Troque para for quando o corpo do loop depender da posição numérica ou de acesso não sequencial.
FAQ
Como obter chave e valor em um loop foreach no PHP?
Use a sintaxe $key => $value: foreach ($array as $key => $value). Isso atribui a chave do PHP foreach ($key) e o valor ($value) em cada iteração, tanto para arrays indexados quanto associativos. Se você só precisa de valores, use foreach ($array as $value).
O foreach pode iterar objetos ou apenas arrays?
foreach funciona com qualquer valor que implemente a interface Traversable, incluindo implementações de Iterator e IteratorAggregate. Para objetos simples, ele percorre propriedades visíveis conforme o escopo: todas as propriedades dentro da classe, apenas as public fora dela.
Qual é a diferença entre foreach e array_map no PHP?
foreach é uma estrutura de controle que executa um bloco para cada elemento, permitindo efeitos colaterais como echo ou break antecipado. array_map aplica um callback e retorna um novo array. Use array_map quando quiser um novo array e nenhuma mutação.