Entendendo a função end() de array do PHP
Aprenda como usar a função end() do PHP para retornar o último valor de um array, como ela move o ponteiro interno e como evitar armadilhas comuns.
Em PHP, arrays são um dos tipos de dados mais usados. Arrays podem armazenar uma coleção de dados em uma única variável, que pode ser manipulada e iterada facilmente. Uma das funções disponíveis para manipular arrays é a função end().
Em sua forma mais simples, a função end() retorna o último valor de um array. Internamente, ela também move o ponteiro interno do array para o último elemento — um detalhe que a maioria das pessoas ignora. Neste artigo, abordaremos a sintaxe da função end(), como ela funciona na prática, como interage com o ponteiro interno e as armadilhas comuns — arrays vazios e arrays associativos — que costumam surpreender os desenvolvedores.
Sintaxe
A sintaxe da função end() é direta:
end(array &$array): mixedOnde $array é o array cujo último elemento queremos retornar. Dois pontos merecem destaque:
- O array é passado por referência (
&$array) porqueend()modifica o ponteiro interno do array. Por isso, você deve passar uma variável real, não uma expressão inline comoend([1, 2, 3])— isso emite um aviso em versões antigas do PHP e um erro fatal no PHP 8.1+. - O tipo de retorno é
mixed: retorna o valor do último elemento, oufalsese o array estiver vazio.
Uso
Vamos examinar mais de perto como a função end() funciona na prática. Considere o seguinte array:
Um Array PHP
$fruits = array('apple', 'banana', 'cherry');Para recuperar o último elemento deste array usando end(), usaríamos o seguinte código:
Após executar este código, $last_fruit conteria a string 'cherry'.
Modificando o Ponteiro do Array
Todo array PHP mantém um ponteiro interno que rastreia uma posição "atual". Chamar end() move esse ponteiro para o último elemento. As outras funções de ponteiro também o movem: reset() volta para o primeiro elemento, next() avança um passo, prev() recua um passo, e current() lê o elemento na posição atual do ponteiro sem movê-lo.
Como end() deixa o ponteiro no último elemento, chamar current() logo após retorna esse mesmo último valor:
<?php
$fruits = ['apple', 'banana', 'cherry'];
end($fruits);
echo current($fruits);Este código produzirá a seguinte saída:
cherrySe você precisar iterar sobre um array em ordem inversa, não tente fazer isso chamando end() repetidamente — o ponteiro nunca avança além do último elemento, então um loop controlado por end() nunca terminaria. Em vez disso, use array_reverse() (ou um loop for indexado padrão contando de count($array) - 1 para baixo):
<?php
$fruits = ['apple', 'banana', 'cherry'];
foreach (array_reverse($fruits) as $fruit) {
echo $fruit . "<br>";
}Este código produzirá a seguinte saída:
cherry
banana
appleArmadilhas Comuns
Há algumas armadilhas comuns a ter em mente ao usar a função end():
Arrays Vazios
Se o array passado para end() estiver vazio, a função retorna false. Isso é ambíguo: false também é um valor legítimo que um array não vazio pode conter, então uma verificação simples pode dar a resposta errada.
Para estar seguro, verifique primeiro se o array está vazio (com empty() ou count()), ou use a comparação estrita !== false:
Arrays Associativos
A função end() sempre retorna o valor do último elemento, independentemente de o array ser indexado ou associativo:
Se você precisar recuperar a última chave de um array associativo, use a função array_key_last() em vez disso:
end() vs array_pop()
Um ponto de confusão comum é a diferença entre end() e array_pop(). Ambos fornecem o último elemento, mas:
end()lê o último valor e deixa o array intacto (apenas move o ponteiro interno).array_pop()remove o último elemento e o retorna, reduzindo o array em um.
Use end() quando quiser apenas verificar o último valor; use array_pop() quando realmente quiser removê-lo do array.
Funções relacionadas
A função end() faz parte da família de funções de ponteiro interno do PHP. Estes capítulos cobrem o restante:
reset()— move o ponteiro para o primeiro elemento e o retorna.current()— lê o elemento na posição atual do ponteiro.next()— avança o ponteiro e retorna o próximo elemento.prev()— recua o ponteiro e retorna o elemento anterior.array_reverse()— obtém uma cópia invertida do array para iteração reversa limpa.array_pop()— remove e retorna o último elemento.
Conclusão
Neste artigo, examinamos detalhadamente a função end() em PHP, incluindo sua sintaxe, uso e armadilhas comuns. Embora possa parecer uma função simples, há nuances importantes a considerar ao usá-la. Ao entender como end() funciona, você pode evitar erros comuns e usar esta função em todo o seu potencial no seu código PHP.
Diagrama
Aqui está um diagrama para ilustrar o uso da função end():
graph TD
A[Array] --> B(end())
B --> C{Check result}
C --> |True| D(Return last element)
C --> |False| E(Handle empty array)