each()
A função each() do PHP retornava o par chave-valor atual e avançava o ponteiro. Descontinuada no 7.2 e removida no 8.0. Veja alternativas modernas.
Introdução
A função each() era historicamente usada para percorrer um array elemento por elemento, retornando o par chave-valor atual e avançando o ponteiro interno do array. Ela alimentava um idioma comum com laço while para iterar arrays antes que foreach se tornasse o padrão.
Importante:
each()foi descontinuada no PHP 7.2 e completamente removida no PHP 8.0. Chamá-la no PHP 8+ lança umErrorfatal. Esta página documenta seu comportamento legado para que você possa ler e migrar código antigo — mas nunca escreva código novo com ela. Acesse Alternativas modernas para saber o que usar no lugar.
Esta página aborda o que each() fazia, sua sintaxe e formato de retorno, o comportamento do ponteiro interno que a tornava complicada e como reescrever cada uso com foreach.
Sintaxe
A sintaxe da função each() é a seguinte:
Sintaxe da função Each() em PHP
each(array $array): array|falseA função each() recebe um array como parâmetro e retorna um array ou false em caso de falha.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
$array | array (por referência) | O array a ser lido e avançado. Funciona com arrays indexados e associativos. |
O array é passado por referência porque each() o modifica — especificamente, ela move o ponteiro interno do array para frente a cada chamada.
Valor de retorno
A cada chamada, each() retorna um array de quatro elementos, com chaves numéricas e string apontando para os mesmos dados:
| Índice | Contém |
|---|---|
0 | a chave atual |
key | o mesmo valor que 0 |
1 | o valor atual |
value | o mesmo valor que 1 |
Quando o ponteiro ultrapassa o último elemento, each() retorna false — o que interrompe o laço while clássico.
Uso
O idioma clássico combinava each() com um laço while. Cada iteração obtinha um par e avançava o ponteiro; quando não havia mais pares, each() retornava false e o laço terminava.
Laço each() legado (PHP 7.x e anteriores)
<?php
// Legacy PHP 7.x example. This will throw a fatal Error in PHP 8.0+.
$array = ["one" => 1, "two" => 2, "three" => 3];
while ($element = each($array)) {
echo $element['key'] . ' => ' . $element['value'] . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3Definimos um array associativo e chamamos each() repetidamente dentro de um while. Cada chamada retorna o par atual (acessível como $element['key'] / $element['value']) e avança o ponteiro, até que each() retorne false.
O problema do ponteiro interno
Como each() consome o ponteiro interno, um array só pode ser percorrido completamente uma vez. Para iterar uma segunda vez, era necessário chamar reset() primeiro para rebobinar o ponteiro ao início. Esquecer isso era uma fonte frequente de bugs do tipo "meu laço não faz nada" — e é uma das razões pelas quais each() foi eventualmente removida em favor de foreach, que usa seu próprio iterador e nunca perturba o array.
Equivalente moderno no PHP 8+
Todo o padrão while (each()) se resume a um único foreach mais claro:
<?php
$array = ["one" => 1, "two" => 2, "three" => 3];
foreach ($array as $key => $value) {
echo $key . ' => ' . $value . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3foreach é mais conciso, não toca o ponteiro interno (então o array permanece reutilizável) e é o único dos dois que funciona no PHP 8+.
each() vs. funções similares de array
each() é frequentemente agrupada com outras ferramentas de iteração, mas cada uma faz algo distinto:
| Função | O que faz | Retorna par chave/valor? | Toca o ponteiro interno? |
|---|---|---|---|
foreach | Construção de linguagem para percorrer todos os elementos | Sim (as $key => $value) | Não |
array_walk() | Aplica um callback a cada elemento, no lugar | Não | Não |
array_map() | Constrói um novo array a partir dos resultados de um callback | Não | Não |
current() / next() / key() | Lê o elemento no ponteiro / avança-o / lê sua chave | Parcialmente (separadamente) | Sim (next()) |
Se você precisar do controle manual de ponteiro que each() oferecia, combine current(), key(), next() e reset() — essas funções ainda estão disponíveis no PHP 8+.
Status legado e alternativas modernas
A função each() está descontinuada (PHP 7.2) e removida (PHP 8.0). Para todo código novo:
- Iterando um array? Use
foreach. - Transformando valores em um novo array? Use
array_map(). - Modificando elementos no lugar? Use
array_walk(). - Precisa de passos manuais? Use
current()+next()+reset().
Conclusão
each() foi a forma preferida de percorrer um array e obter pares chave-valor, mas sua dependência do ponteiro interno a tornava propensa a erros, e o PHP 8.0 a removeu completamente. Trate-a como história somente leitura: reconheça-a em código legado e substitua-a por foreach — que é mais seguro, mais rápido e o padrão moderno.