2010-06-11 15 views
5

Tengo una matriz asociativa estándar en PHP. ¿Cuál es la forma más sencilla de obtener la última clave en esa matriz?Obtenga la clave final de una matriz en PHP

ejemplo:

$foo = array('key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3'); 

y me gustaría conseguir 'key3';

Respuesta

9

El método más rápido sería la siguiente:

end($foo); 
$last = key($foo); 

método de Tesserex es innecesariamente ávidas de recursos cuando no se necesita todas las claves.

+1

sí, ese primer upvote vino de mí. – Tesserex

+0

;-) Incluso busqué una buena manera de guardar el puntero interno para poder volver luego, pero no pude encontrar ninguna forma agradable de hacerlo ... –

+0

@Emil Buen punto, también acabo de mirar y No creo que haya una manera de guardar el estado del puntero (ninguna función expone 'zend_hash_get_pointer' y' zend_hash_set_pointer'). Sería una buena adición. – Artefacto

8
$keys = array_keys($foo); 
$last = end($keys); 

lo necesario para pasar una variable real a end, no se puede poner otra función dentro de allí.

1

El siguiente es no la más simple, pero se puede ser mucho más feliz que lidiar con grandes (en términos del número de elementos, aunque probablemente ser mejor para la mayoría de usos) matrices que las otras respuestas.

$last_key = key(array_slice($subject, -1, 1, true)); 

conjetura, no puede ser cierto para todos los casos

+0

Tiendo a estar en desacuerdo. Probé las tres soluciones en una matriz con 10000 valores enteros y mi solución fue aproximadamente 20 veces más rápida que la tuya. Resultados en segundos, medir por microtime(): tiempo típico para los tuyos: 0.00013. Tiempo típico para la mía: 0.0000069. Tiempo típico para Tesserex: 0.003. –

+0

En una matriz pequeña (cien valores enteros): el tuyo: 0.000015. Mina: 0.000005. Tesserex: 0.00003 –

+0

No voy a empezar a dar resultados de referencia, por lo que estoy de acuerdo. De cualquier manera, el OP fue después del ** más simple ** que el mío ciertamente no es. :-) – salathe

Cuestiones relacionadas