Wie bekomme ich den letzten Schlüssel in einem Array?

Wie kann ich den letzten Schlüssel eines Arrays bekommen?

Eine Lösung wäre eine Kombination aus end und key (Zitat) :

  • end() bringt den internen pointers des Arrays zum letzten Element und gibt seinen Wert zurück.
  • key() gibt das Indexelement der aktuellen Array-Position zurück.

Also sollte ein Teil des Codes wie dieser den Trick machen:

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

Wird ausgegeben:

 string 'last' (length=4) 

dh der Schlüssel des letzten Elements meines Arrays.

Nachdem dies geschehen ist, befindet sich der interne pointers des Arrays am Ende des Arrays. Wie in den Kommentaren erwähnt, möchten Sie möglicherweise reset() für das Array ausführen, um den pointers zurück zum Anfang des Arrays zu bringen.

Obwohl end() am einfachsten zu sein scheint , ist es nicht das schnellste.

Die schnellere und viel stärkere Alternative ist array_slice()

Strike-out von Redakteur: Diese Behauptung wurde nicht begründet und widersprüchliche Beweise wurden in den Kommentaren erwähnt. Wenn die Behauptungen dieses Posters über Geschwindigkeit / Effizienz ein wenig Wahrheit sind, dann muss ein Benchmark-Test bereitgestellt werden.

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

ich bevorzuge

 end(array_keys($myarr)) 

Verwenden Sie einfach: echo $array[count($array) - 1];

Ich weiß nicht, ob das schneller geht oder nicht, aber es scheint einfacher zu sein, dies zu tun, und Sie vermeiden den Fehler, indem Sie keine function zum Beenden übergeben () …

es brauchte nur eine Variable … keine große Sache, um eine weitere Codezeile zu schreiben, dann löschte sie, wenn es nötig war.

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

Seit PHP 7.3 (2018) gibt es (endlich) function dafür: http://php.net/manual/en/function.array-key-last.php

 $array = ['apple'=>10,'grape'=>15,'orange'=>20]; echo array_key_last ( $array ) 

wird ausgegeben

 orange 

Verwenden Sie die functionen array_pop und array_keys wie folgt:

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

Ich möchte auch eine alternative Lösung für dieses Problem anbieten.

Angenommen, alle Ihre Schlüssel sind numerisch und ohne Lücken, ist es meine bevorzugte Methode, das Array minus 1 von diesem Wert zu zählen (um der Tatsache Rechnung zu tragen, dass die Array-Schlüssel bei 0 beginnen.

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

Dies würde dir geben:

int (1) Katze

Sie können dies verwenden:

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

Eine andere Lösung besteht darin, eine function zu erstellen und sie zu verwenden:

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

Ich habe einfach die Helfer-function von Xander genommen und sie mit den Antworten verbessert:

 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)); 
 $arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3'); list($last_key) = each(array_reverse($arr)); print $last_key; // key3 

Ab PHP7.3 können Sie direkt auf den letzten Schlüssel eines Array mit array_key_last () zugreifen.

Dies bedeutet, dass Sie den Wert des endgültigen Schlüssels ohne folgende Informationen abrufen können:

  1. Bewegen des Array-pointerss (der zwei Zeilen Code benötigt) oder
  2. Sortieren, Umkehren, Poppen, Zählen, Indizieren einer Reihe von Schlüsseln oder andere Spielereien

Diese function war lange überfällig und eine willkommene Ergänzung des Array-functionswerkzeuggürtels, der die performance verbessert, unerwünschte Nebeneffekte vermeidet und sauberen / direkten / intuitiven Code ermöglicht.

Hier ist eine 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); } 

Ausgabe:

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

Einige Notizen:

  • array_key_last() ist die Schwesterfunktion von array_key_first () .
  • Beide functionen sind "pointers ignorant".
  • Beide functionen geben null wenn das Array leer ist.
  • Verworfene Geschwisterfunktionen ( array_value_first() & array_value_last() ) hätten auch den pointers-ignoranten Zugriff auf Buchstützenelemente angeboten, aber sie haben offensichtlich nicht genügend Stimmen gesammelt, um zum Leben zu kommen.

Hier sind einige relevante Seiten, die die neuen functionen diskutieren:

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

Dies funktioniert, weil PHP seinen Array Pointer intern für $ array verschiebt

Die bestmögliche Lösung, die auch inline genutzt werden kann:

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

Bevor Sie diese Lösung veröffentlichen, lassen Sie mich wissen, ob Sie eine bessere Lösung haben, die inline ausgeführt werden kann und auch über die gleiche oder bessere performance verfügt.

Inline-Beispielverwendung:

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

So was:

 $keys = array_keys($array); $lastKey = $keys[sizeof($array)-1]; 

Es sollte so etwas sein …

 $latest_kid = end(array_reverse(array_keys($my_array))); 

Weil es das Array umkehrt, wenn wir array_keys aufrufen.