2010-06-11 19 views

Antwort

9

schnellste Methode wäre dies:

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

Tesserex Methode unnötig hungrig ist Ressource, wenn Sie nicht alle Schlüssel benötigen.

+1

ja, das erste upvote von mir kam. – Tesserex

+0

;-) Ich habe sogar nach einem netten Weg gesucht, den internen Zeiger zu speichern, so dass du danach zurück gehen könntest, aber keinen schönen Weg finden konnte ... –

+0

@Emil Guter Punkt, ich habe auch nur gesucht und Ich denke nicht, dass es eine Möglichkeit gibt, den Zeigerzustand zu speichern (keine Funktion legt zend_hash_get_pointer und zend_hash_set_pointer offen). Wäre eine nette Ergänzung. – Artefacto

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

Sie benötigen eine aktuelle Variable end passieren, können Sie nicht eine andere Funktion innerhalb dort setzen können.

1

Hier finden Sie nicht die einfachste, aber es wird kann viel glücklicher sein mit großen zu beschäftigen (in Bezug auf die Anzahl der Elemente, obwohl wahrscheinlich für die meisten Anwendungen besser sein) Arrays als die anderen antworten.

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

Vermutung kann nicht wahr sein für alle Fälle

+0

Ich stimme eher nicht zu. Ich habe alle drei Lösungen auf einem Array mit 10000 ganzzahligen Werten ausprobiert und meine Lösung war etwa 20 mal schneller als deine. Ergebnisse in Sekunden, messen Sie nach Mikrozeit(): typische Zeit für Ihre: 0,00013. Typische Zeit für meine: 0.0000069. Typische Zeit für Tesserex: 0.003. –

+0

Auf einem kleinen Array (hundert ganzzahlige Werte): Ihre: 0.000015. Meine: 0.000005. Tesserex: 0.00003 –

+0

Ich werde nicht anfangen, Benchmark-Ergebnisse zu geben, die ausreichen, um zu sagen, ich stimme eher nicht zu. Wie auch immer, das OP war nach dem ** einfachsten **, was meiner Meinung nach nicht ist. :-) – salathe

Verwandte Themen