vacio multidimensional length functions elementos ejemplos asociativo array agregar php arrays

php - multidimensional - ¿Cómo obtener la última clave en una matriz?



php array functions (14)

¿Cómo puedo obtener la última clave de una matriz?


A partir de PHP7.3 puede acceder directamente a la última clave en (un nivel externo de) una matriz con http://php.net/manual/en/function.array-key-last.php

Esto significa que puede recuperar el valor de la clave final sin:

  1. moviendo el puntero de la matriz (que requiere dos líneas de código) o
  2. ordenar, invertir, hacer estallar, contar, indexar una matriz de claves o cualquier otra actividad

Esta función se debió hace mucho tiempo y es una adición bienvenida al cinturón de herramientas de la función de matriz que mejora el rendimiento, evita los efectos secundarios no deseados y permite el código limpio / directo / intuitivo.

Aquí hay una demo :

$array = ["a" => "one", "b" => "two", "c" => "three"]; if (!function_exists(''array_key_last'')) { echo "please upgrade to php7.3"; } else { echo "First Key: " , key($array) , "/n"; echo "Last Key: " , array_key_last($array) , "/n"; next($array); // move array pointer to second element echo "Second Key: " , key($array) , "/n"; echo "Still Last Key: " , array_key_last($array); }

Salida:

First Key: a Last Key: c // <-- unaffected by the pointer position, NICE! Second Key: b Last Key: c // <-- unaffected by the pointer position, NICE!

Algunas notas:

  • array_key_last() es la función hermana de array_key_first() .
  • Ambas funciones son "puntero-ignorante".
  • Ambas funciones devuelven null si la matriz está vacía.
  • Las funciones de hermanos descartados ( array_value_first() & array_value_last() ) también habrían ofrecido el acceso de los ignorantes a los elementos de la librería, pero evidentemente no lograron obtener suficientes votos para cobrar vida.

Aquí hay algunas páginas relevantes que discuten las nuevas características:


Acabo de tomar la función de ayuda de Xander y la mejoré con las respuestas antes:

function last($array){ $keys = array_keys($array); return end($keys); } $arr = array("one" => "apple", "two" => "orange", "three" => "pear"); echo last($arr); echo $arr(last($arr));


Aunque end() parece ser el más fácil , no es el más rápido.

La alternativa más rápida y mucho más fuerte es array_slice()

Strike-out por el editor: Esta afirmación no se ha fundamentado y se ha mencionado evidencia contraria en los comentarios. Si hay algo de verdad en las afirmaciones de este póster sobre la velocidad / eficiencia, se debe proporcionar una prueba de referencia.

$last_key = key( array_slice( $array, -1, 1, TRUE ) );



Intente usar la función array_pop y array_keys siguiente manera:

<?php $array = array( ''one'' => 1, ''two'' => 2, ''three'' => 3 ); echo array_pop(array_keys($array)); // prints three ?>


La mejor solución posible que se puede utilizar también se usa en línea:

end($arr) && false ?: key($arr)

Antes de probar esta solución, avíseme si tiene una solución mejor que pueda integrarse y que tenga el mismo o mejor rendimiento.

Ejemplo de uso en línea:

$obj->setValue( end($arr) && false ?: key($arr) // last $arr key );


No sé si esto va a ser más rápido o no, pero parece más fácil hacerlo de esta manera, y evita el error al no pasar una función a end () ...

solo necesitaba una variable ... no es un gran problema para escribir una línea más de código, luego desactívela si es necesario.

$array = array( ''first'' => 123, ''second'' => 456, ''last'' => 789, ); $keys = array_keys($array); $last = end($keys);


Puedes usar esto:

$array = array("one" => "apple", "two" => "orange", "three" => "pear"); end($array); echo key($array);

Otra solución es crear una función y usarla:

function endKey($array){ end($array); return key($array); } $array = array("one" => "apple", "two" => "orange", "three" => "pear"); echo endKey($array);


Solo use: echo $array[count($array) - 1];


También me gustaría ofrecer una solución alternativa a este problema.

Suponiendo que todas las claves son numéricas sin espacios, mi método preferido es contar la matriz y luego menos 1 a partir de ese valor (para tener en cuenta el hecho de que las claves de la matriz comienzan en 0).

$array = array(0=>''dog'', 1=>''cat''); $lastKey = count($array)-1; $lastKeyValue = $array[$lastKey]; var_dump($lastKey); print_r($lastKeyValue);

Esto te daría:

gato int (1)


yo prefiero

end(array_keys($myarr))


Una solución sería utilizar una combinación de end y key (cita) :

  • end() avanza el puntero interno de la matriz al último elemento y devuelve su valor.
  • key() devuelve el elemento de índice de la posición actual de la matriz.

Entonces, una porción de código como este debería hacer el truco:

$array = array( ''first'' => 123, ''second'' => 456, ''last'' => 789, ); end($array); // move the internal pointer to the end of the array $key = key($array); // fetches the key of the element pointed to by the internal pointer var_dump($key);

Saldrá:

string ''last'' (length=4)

Es decir, la clave del último elemento de mi matriz.

Una vez hecho esto, el puntero interno de la matriz estará al final de la matriz. Como se señaló en los comentarios, es posible que desee ejecutar reset() en la matriz para que el puntero vuelva al principio de la matriz.


$arr = array(''key1''=>''value1'',''key2''=>''value2'',''key3''=>''value3''); list($last_key) = each(array_reverse($arr)); print $last_key; // key3


$array = array( ''something'' => array(1,2,3), ''somethingelse'' => array(1,2,3,4) ); $last_value = end($array); $last_key = key($array); // ''somethingelse''

Esto funciona porque PHP mueve su puntero de matriz internamente para $ array