Wie kann ich den letzten Schlüssel eines Arrays erhalten?
Wie kann ich den letzten Schlüssel eines Arrays erhalten?
Antworten:
Eine Lösung wäre, eine Kombination aus end
und (unter Angabe) zu verwenden :key
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 Array-Position zurück. Ein Teil des Codes wie dieser sollte also 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.
Danach befindet sich der interne Zeiger des Arrays am Ende des Arrays. Wie in den Kommentaren erwähnt, möchten Sie möglicherweise reset()
das Array ausführen , um den Zeiger wieder an den Anfang des Arrays zu bringen.
reset()
) ;; Aber Sie haben Recht, wenn Sie auf diese Funktion hinweisen, die nützlich sein könnte.
array('a', 'b', 'c', 'd', 'a')
es wird Schlüssel 0 statt 4 zurückgeben.
Obwohl end()
es am einfachsten zu sein scheint, ist es nicht das schnellste. Die schnellere und viel stärkere Alternative ist array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
Wie die Tests sagen , ist es auf einem Array mit 500000 Elementen fast 7x schneller!
end($arr);$key = key($arr);reset($arr);
mit (b) verglichen $key = key(array_slice($arr,-1,1,true));
... was dazu führte, dass end()
ich VIEL schneller war! end () = 0.05326 Sekunden, array_slice = 8.506 Sekunden ... huh ??
end()
ist am schnellsten, weil es von einer sehr einfachen C-Funktion abgeleitet werden kann, wie:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
auf das letzte Element. So end()
ziemlich O machen (1). :-)
ich bevorzuge
end(array_keys($myarr))
end((array_keys($myarr)))
, um den Hinweis zu umgehen.
Seit PHP 7.3 (2018) gibt es dafür (endlich) eine Funktion: 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
Benutz einfach : echo $array[count($array) - 1];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
was ist interessant, aber nicht gut fürs Geschäft, wenn Sie ein Zeitbudget haben
$a[1] = 1; $a[5] = 5; $a[0] = 0;
, haben Sie ein Array mit Schlüsseln (1, 5, 0) in dieser Reihenfolge. count($a)
ergibt 3 und $a[2]
ist nicht definiert. Es gibt Ihnen sicherlich nicht 5 zurück.
Sie wissen nicht, ob dies schneller sein wird oder nicht, aber es scheint einfacher zu sein, dies zu tun, 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 deaktivieren, wenn es nötig war.
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
Ab PHP7.3 können Sie mit array_key_last () direkt auf den letzten Schlüssel in (der äußeren Ebene) eines Arrays zugreifen.
Das bringt definitiv einen Großteil der Debatte auf dieser Seite ins Bett. Es ist zweifellos der beste Darsteller, hat keine Nebenwirkungen und ist eine direkte, intuitive Single-Call-Technik, um genau das zu liefern, wonach diese Frage sucht.
Ein grober Benchmark als Beweis: https://3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
* Das Testarray enthält 500000 Elemente. Die Mikrozeit wird 100x wiederholt, dann gemittelt und dann mit 1000 multipliziert, um eine wissenschaftliche Notation zu vermeiden. Dank an @MAChitgarha für den ersten Benchmark , der unter der Antwort von @ TadejMagajna kommentiert wurde .
Dies bedeutet, dass Sie den Wert des endgültigen Schlüssels abrufen können, ohne:
Diese Funktion war längst überfällig und eine willkommene Ergänzung des Werkzeuggürtels für Array-Funktionen, die die Leistung verbessert, unerwünschte Nebenwirkungen 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 () .null
wenn das Array leer ist.array_value_first()
& array_value_last()
) hätten auch den zeigerunabhängigen Zugang zu Buchstützenelementen geboten, aber sie konnten offensichtlich nicht genügend Stimmen sammeln, um zum Leben zu erwecken.Hier sind einige relevante Seiten, auf denen die neuen Funktionen erläutert werden:
ps Wenn jemand einige der anderen Techniken abwägt, können Sie sich auf diese kleine Sammlung von Vergleichen beziehen: ( Demo )
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408
Versuchen Sie, die Funktionen array_pop und array_keys wie folgt zu verwenden:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
der Rückgabewert von array_keys()
und nicht das ursprüngliche Array verarbeitet.
Ab PHP ist> = 7.3 array_key_last()
der beste Weg, um den letzten Schlüssel eines Arrays zu erhalten. Mit Kombination aus end()
, key()
und reset()
erst letzten Schlüssel eines Arrays zu erhalten , ist empörend.
$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3
vergleiche 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 die Kombination von end()
und verwendenkey()
Ich möchte auch eine alternative Lösung für dieses Problem anbieten.
Unter der Annahme, dass alle Ihre Schlüssel ohne Lücken numerisch sind, besteht meine bevorzugte Methode darin, das Array zu zählen und dann minus 1 von diesem Wert (um die Tatsache zu berücksichtigen, 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);
Dies würde Ihnen geben:
int (1) cat
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);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
Ich habe gerade die Helfer-Funktion von Xander übernommen und sie mit den vorherigen 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));
$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-Zeiger intern für $ array verschiebt
Die bestmögliche Lösung, die auch inline verwendet werden kann:
end($arr) && false ?: key($arr)
Diese Lösung ist nur Ausdruck / Aussage und bietet gute nicht die bestmögliche Leistung.
Inline Beispielverwendung:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
UPDATE: In PHP 7.3+: Verwenden Sie (natürlich) die neu hinzugefügte array_key_last()
Methode.