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

  1. $precos é um array associativo que mapeia nomes de produtos para preços.
  2. foreach ($precos as $item => $preco) atribui a chave atual a $item e o valor atual a $preco em cada iteração, sem índice manual nem count().
  3. Cada iteração imprime o par chave-valor. foreach lida 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

foreachfor
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.