webentwicklung-frage-antwort-db.com.de

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

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

303
ajsie

Eine Lösung wäre die Verwendung einer Kombination aus end und key(quoting):

  • end() rückt den internen Zeiger des Arrays auf das letzte Element vor und gibt seinen Wert zurück. 
  • key() gibt das Indexelement der aktuellen Arrayposition zurück. 

Ein Teil des Codes wie dieser sollte also den Trick ausführen:

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

der Schlüssel des letzten Elements meines Arrays.

Nachdem dies geschehen ist, befindet sich der interne Zeiger des Arrays am Ende des Arrays. Wie in den Kommentaren erläutert, möchten Sie möglicherweise reset() im Array ausführen, um den Zeiger an den Anfang des Arrays zu bringen.

569
Pascal MARTIN

Obwohl end() am einfachsten zu sein scheintEs ist nicht das schnellste.

Die schnellere und viel stärkere Alternative ist array_slice() </ s>

Streik durch den Herausgeber: Diese Behauptung wurde nicht begründet und gegenteilige Beweise wurden in den Kommentaren erwähnt. Wenn da etwas ist die Wahrheit zu den Behauptungen dieses Posters über Geschwindigkeit/Effizienz, dann eine Benchmark-Test muss bereitgestellt werden.

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

Ich bevorzuge 

end(array_keys($myarr))
47

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

29

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

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

wird ausgegeben

orange
25
Patryk Godowski

Weiß nicht, ob dies schneller sein wird oder nicht, aber es scheint einfacher zu sein, und Sie vermeiden den Fehler, indem Sie keine Funktion an end () übergeben ... 

es brauchte nur eine Variable ... keine große Sache, um eine weitere Codezeile zu schreiben und sie dann zu löschen, wenn Sie es brauchen.

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

$keys = array_keys($array);
$last = end($keys);
19
Ryan Hungate

Versuchen Sie es mit array_pop und array_keys wie folgt:

<?php

$array = array(
    'one' => 1,
    'two' => 2,
    'three' => 3
);

echo array_pop(array_keys($array)); // prints three

?>
8
codaddict

Ab PHP7.3 können Sie mit array_key_last () direkt auf den letzten Schlüssel (die äußere Ebene eines Arrays) zugreifen.

Das bedeutet, dass Sie den Wert des endgültigen Schlüssels ohne Folgendes abrufen können:

  1. bewegen des Arrayzeigers (der zwei Codezeilen erfordert) oder
  2. sortieren, Umkehren, Poppen, Zählen, Indizieren eines Arrays von Schlüsseln oder einer beliebigen anderen Spielerei

Diese Funktion war lange überfällig und eine willkommene Ergänzung des Array-Funktionswerkzeuggürtels, die die Leistung 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 Geschwisterfunktion von array_key_first () .
  • Beide Funktionen sind "Zeiger-ignorant".
  • Beide Funktionen geben null zurück, wenn das Array leer ist.
  • Verworfene Geschwisterfunktionen (array_value_first() & array_value_last()) hätten auch den Zeiger ignoranten Zugriff auf die Buchstützenelemente geboten, aber offenbar nicht genügend Stimmen gesammelt, um zum Leben zu erwecken.

Hier sind einige relevante Seiten, die die neuen Funktionen besprechen:

5
mickmackusa

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 Funktion zu erstellen und zu verwenden:

function endKey($array){
end($array);
return key($array);
}

$array = array("one" => "Apple", "two" => "orange", "three" => "pear");
echo endKey($array);
3
Atif Tariq

Ich habe gerade die Helfer-Funktion von Xander genommen und sie mit den Antworten zuvor 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));
3
Steve

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

Angenommen, alle Ihre Schlüssel sind numerisch ohne Lücken. Meine bevorzugte Methode ist, das Array dann minus 1 von diesem Wert zu zählen (um der Tatsache Rechnung zu tragen, dass 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);

Das würde Ihnen geben:

int (1) Katze

3
user2732377

Ab PHP> = 7 array_key_last() ist der beste Weg, den letzten Schlüssel eines Arrays abzurufen. Die Kombination von end(), key() und reset(), nur um den letzten Schlüssel eines Arrays zu erhalten, ist unverschämt.

$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3

vergleichen Sie das mit

end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)

Sie müssen das Array zurücksetzen, damit der Zeiger am Anfang steht, wenn Sie eine Kombination aus end() und key() verwenden.

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

Versuchen Sie es mit array_reverse()

 $arr = array(
     'first' => 01,
     'second' => 10,
     'third' => 20, 
 );  
 $key = key(array_reverse($arr));
 var_dump($key);
0
Vishal