current()
A função current() em PHP retorna o valor do elemento apontado pelo ponteiro interno de um array sem movê-lo.
Introdução
Todo array em PHP possui um ponteiro interno — um cursor oculto que marca um elemento como o "atual". A função current() lê o valor nesse cursor sem movê-lo. Isso faz de current() a metade de leitura do kit de travessia manual de arrays do PHP, a contraparte das funções de navegação next(), prev(), reset() e end().
Este capítulo explica exatamente o que é o ponteiro interno, como current() se comporta nas bordas de um array e as armadilhas que vale conhecer antes de utilizá-la.
O que é a Função current() em PHP?
current() retorna o valor do elemento em que o ponteiro interno do array está posicionado no momento. Ela não avança o ponteiro, portanto chamá-la repetidamente retorna o mesmo valor até que algo mova o cursor.
Quando um array novo é criado, o ponteiro começa no primeiro elemento. As funções que o movem são:
next()— avança um elemento à frente e retorna esse valor.prev()— recua um elemento e retorna esse valor.reset()— salta para o primeiro elemento.end()— salta para o último elemento.
current() é a única dessas que lê sem mover o ponteiro.
Sintaxe da Função current()
current(array $array): mixedEla recebe um único argumento — o array a inspecionar — e retorna o valor na posição atual do ponteiro, ou false se o array estiver vazio ou o ponteiro tiver ultrapassado o último elemento.
Atenção: Como
current()retornafalseno fim de um array, não é possível usá-la para detectar o fim de um array que legitimamente contenha um valorfalse. Usekey(), que retornanullalém do fim, quando precisar de uma verificação confiável de fim de array.
Exemplo Básico
O ponteiro começa no primeiro elemento, então isto imprime apple. Chame current() mais dez vezes e você ainda receberá apple — nada moveu o cursor.
Movendo o Ponteiro com next() e prev()
current() se torna útil em combinação com as funções de navegação. Cada uma reposiciona o cursor, e current() (ou o valor que a própria função retorna) indica onde você chegou.
<?php
$fruits = ['apple', 'banana', 'cherry'];
echo current($fruits) . "\n"; // apple (pointer at index 0)
next($fruits);
echo current($fruits) . "\n"; // banana (pointer at index 1)
next($fruits);
echo current($fruits) . "\n"; // cherry (pointer at index 2)
prev($fruits);
echo current($fruits) . "\n"; // banana (pointer back at index 1)
reset($fruits);
echo current($fruits) . "\n"; // apple (pointer reset to start)A saída é:
apple
banana
cherry
banana
appleO que Acontece no Final do Array
Avance o ponteiro além do último elemento e current() retorna false:
<?php
$fruits = ['apple', 'banana', 'cherry'];
end($fruits); // pointer on the last element
echo current($fruits) . "\n"; // cherry
next($fruits); // step beyond the last element
var_dump(current($fruits)); // bool(false)Isso imprime:
cherry
bool(false)É por isso que a atenção acima é importante: um false retornado por current() pode significar "além do fim" ou "o valor do elemento realmente é false."
current() e foreach
Uma surpresa comum: foreach itera sobre um array sem usar ou mover seu ponteiro interno. Portanto, current() não é afetada por um laço foreach e ainda reflete o que as funções de movimentação do ponteiro definiram por último.
<?php
$fruits = ['apple', 'banana', 'cherry'];
foreach ($fruits as $fruit) {
// looping does not touch the internal pointer
}
echo current($fruits); // apple — still at the startIsso imprime apple, não false. Se você quiser controle manual sobre a posição, use next()/current(); se quiser apenas percorrer todos os elementos, use foreach.
Quando Usar current()
Use current() quando precisar de uma travessia com estado por um array — uma em que você avança o cursor ao longo de várias chamadas de função ou iterações de laço e precisa inspecionar o elemento ativo. Casos típicos:
- Processar um array no estilo fila enquanto alterna entre
next()eprev(). - Ler o primeiro elemento de forma eficiente:
current($array)retorna o primeiro valor sem precisar de sua chave. - Implementar um cursor personalizado sobre um conjunto de dados.
Para iteração cotidiana, prefira foreach — é mais claro e imune a surpresas com ponteiros.
Conclusão
current() lê o valor no ponteiro interno de um array sem movê-lo, tornando-a a metade de leitura do conjunto de travessia manual do PHP junto com next(), prev(), reset() e end(). Lembre-se de suas duas particularidades: ela retorna o mesmo valor até que algo mova o cursor, e retorna false além do fim do array — portanto, use key() quando precisar detectar o fim de forma confiável.