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.

1

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 );
2

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 de array_pop()
  • Si la variable pasada es un array vacío, array_pop() devuelve NULL. Si no es un array devuelve NULL 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: