Cómo obtener el último elemento de un array en PHP: end() y array_pop() PHP
Se pueden encontrar muchos y variados métodos para obtener el último elemento de un array en PHP pero puede que con las funciones end() y array_pop() no necesites nada más. A estas dos funciones y como utilizarlas le vamos a dedicar este post. Ahí vamos.
end()
Esta función toma un array y devuelve el valor del último elemento y es la más idónea en la mayoría de los casos:
$var = array( 'Madrid', 'París', 'Londres' );
//Imprime "Londres"
echo end( $var );
Si se pasa un array vacío, la función end()
devolverá false
. Además, si se pasa una variable que no es un array se genera un error tipo Warning con el mensaje «end() expects parameter 1 to be array».
Es importante señalar que end()
sólo admite un array pasado como variable ya que se pasa por referencia y las funciones o métodos no se pueden pasar por referencia:
function my_funcion() {
return array( 'Madrid', 'París', 'Londres' );
}
//Esta expresión dará error
echo end( my_funcion() );
//Esta expresión si es correcta
$var = my_function();
echo end( $var );
No obstante, si se pasa una función el error generado es tipo E_STRICT, que para muchos no es importante. Si para ti es importante y quieres pasar una función suprimiendo este error, puedes pasarla puesta entre paréntesis extra:
//Esta expresión NO dará error
echo end( ( my_funcion() ) );
Cómo se dijo, end()
devuelve el valor del último elemento del array. En arrays asociativos (con pares key => value
) no se devuelve el key. Para obtener el key del último elemento del array se puede recurrir a una combinación de end()
y key()
. Esto es posible por que end()
sitúa el puntero en el último elemento del array:
// Returns the key at the end of the array
function endKey( $array ){
//Aquí utilizamos end() para poner el puntero
//en el último elemento, no para devolver su valor
end( $array );
return key( $array );
}
$var = array( "uno" => "Madrid", "dos" => "París", "tres" => "Londes" );
echo endKey( $var ); // imprime "tres"
Debido a que la variable pasada a end()
se pasa por referencia y que sitúa el puntero en el último elemento del array, puede ser necesario resetear la posición del puntero. Para ello podemos recurrir a la función reset()
:
$var = array( "uno" => "Madrid", "dos" => "París", "tres" => "Londes" );
//Sitúa el puntero en el último elemento del array
end( $var );
//Reseteamos la posición del puntero
reset( $var );
array_pop()
La función array_pop()
devuelve el valor del último elemento de un array al igual que end()
pero con estas diferencias:
- El último elemento del que se devuelve el valor es eliminado del array original, el cuál queda disminuido con un elemento menos
reset()
es ejecutado automáticamente después del uso dearray_pop()
- Si la variable pasada es un array vacío,
array_pop()
devuelveNULL
. Si no es un array devuelveNULL
y genera un error tipo Warning
$var = array( 'Madrid', 'París', 'Londres' );
$ciudad = array_pop( $var );
//imprime Lomdes
echo $ciudad;
//$var queda ahora con el último elemento sustraído: array( 'Madrid', 'París' );
var_dump( $var );
Referencias
Documentación PHP: