Wie kann der erste Schlüssel in einem möglicherweise assoziativen Array am besten ermittelt werden? Mein erster Gedanke war, nur das Array zu finden und es dann sofort so zu brechen:
foreach ($an_array as $key => $val) break;
Wenn also $ key den ersten Schlüssel enthält, scheint dies ineffizient zu sein. Hat jemand eine bessere Lösung?
foreach
ist semantisch falsch.each($arr)['key']
odereach($arr)[0]
würde funktionieren.0.0107
, foreach:0.0217
Antworten:
Update 2019
Ab PHP 7.3 gibt es eine neue integrierte Funktion namens,
array_key_first()
die den ersten Schlüssel aus dem angegebenen Array abruft, ohne den internen Zeiger zurückzusetzen. Weitere Informationen finden Sie in der Dokumentation .Sie können verwenden
reset
undkey
:Es ist im Wesentlichen dasselbe wie Ihr ursprünglicher Code, jedoch mit etwas weniger Aufwand, und es ist offensichtlicher, was passiert.
Denken Sie daran, anzurufen
reset
, sonst erhalten Sie möglicherweise einen der Schlüssel im Array. Sie können auchend
anstelle von verwendenreset
, um den letzten Schlüssel abzurufen.Wenn Sie möchten, dass der Schlüssel den ersten Wert erhält, wird er
reset
tatsächlich zurückgegeben:Es gibt jedoch einen Sonderfall, auf den Sie achten sollten (überprüfen Sie also zuerst die Länge des Arrays):
quelle
reset()
auch das erste Element (Wert, nicht Schlüssel) eines Arrays zurückgegeben, was ebenfalls nützlich sein kann.reset()
sagenDon't use
Reset () `den ersten Wert eines assoziativen Arrays zu erhalten. Es funktioniert hervorragend für echte Arrays, funktioniert jedoch unerwartet bei Iterator-Objekten. bugs.php.net/bug.php?id=38478 `Stimmt das noch? Ich bin verwirrtarray
Objekte, sondern über benutzerdefinierte Objekte (die keine tatsächlichen Arrays sind). Ich denke, sie haben den Unterschied in den Datenstrukturen verwirrt, geben aber im Grundereset
den Wert des ersten "Schlüssels" zurück, der für Objekte$prop
in dem im "Fehler" -Report angegebenen Beispiel angegeben wäre , für ein Array jedoch den ersten Schlüssel. Machen Sie sich also keine Sorgen, solange Sie echte Arrays verwenden (erstellt mitarray(…)
), werden Sie kein Problem haben.next
,reset
,end
oder durch das Array Looping), werden Sie nicht den erwarteten Wert erhalten , wenn Sie anrufenkey
. Rufen Sie also immer an,reset
bevor Sie verwendenkey
, um sicherzustellen, dass Sie das bekommen, was Sie wollen.array_keys
Gibt ein Array von Schlüsseln zurück. Nehmen Sie den ersten Eintrag. Alternativ können Siereset
das Array aufrufen und anschließendkey
. Der letztere Ansatz ist wahrscheinlich etwas schneller (obwohl ich ihn nicht getestet habe), hat aber den Nebeneffekt, dass der interne Zeiger zurückgesetzt wird.quelle
foreach
+break
undreset
+ gibtkey
. Aber das erstere sieht ziemlich seltsam aus, daher würde ich für stilistische Fragen das letztere vorziehen.foreach
dass keine interne Kopie dafür erstellt wird, sondern nur ein Zeiger iteriert wird , ähnlich wie bei der Verwendung der niedrigeren Ebenenext
,current
etc.Interessanterweise ist die foreach-Schleife der effizienteste Weg, dies zu tun.
Da das OP speziell nach Effizienz gefragt hat, sollte darauf hingewiesen werden, dass alle aktuellen Antworten tatsächlich viel weniger effizient sind als ein Foreach.
Ich habe diesbezüglich einen Benchmark mit PHP 5.4 durchgeführt, und die Reset / Key Pointer-Methode (akzeptierte Antwort) scheint etwa siebenmal langsamer zu sein als eine foreach. Andere Ansätze zur Manipulation des gesamten Arrays (array_keys, array_flip) sind offensichtlich noch langsamer und werden bei der Arbeit mit einem großen Array viel schlimmer.
Foreach ist überhaupt nicht ineffizient, verwenden Sie es einfach!
Bearbeiten 03.03.2015:
Es wurden Benchmark-Skripte angefordert, ich habe nicht die ursprünglichen, sondern stattdessen einige neue Tests durchgeführt. Diesmal fand ich den foreach nur etwa doppelt so schnell wie reset / key. Ich habe ein Array mit 100 Schlüsseln verwendet und jede Methode millionenfach ausgeführt, um einen spürbaren Unterschied zu erzielen. Hier ist der Code des einfachen Benchmarks:
Auf meinem PHP 5.5 gibt dies aus:
Zurücksetzen + Schlüssel http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs
quelle
foreach
das Array niemals kopiert, es sei denn, Sie ändern es direkt in der foreach-Schleife. Auf PHP5 könnte die Array-Struktur in einigen Fällen kopiert werden (wenn ihr Refcount> 1 ist) und Sie haben tatsächlich Recht, dass dies dort einen signifikanten Einfluss haben könnte. Glücklicherweise gibt es auf PHP7, wo dieses Problem behoben wurde, keinen Grund zur Sorge. Hier ist eine großartige Lektüre darüber, wie foreach jetzt unter der Haube funktioniert und wie es in der Vergangenheit funktioniert hat.key($an_array)
wird Ihnen den ersten Schlüssel gebenper Blixt bearbeiten: Sie sollten
reset($array);
vorher aufrufenkey($an_array)
, um den Zeiger auf den Anfang des Arrays zurückzusetzen.quelle
Du könntest es versuchen
quelle
Für 2018+
Ab PHP 7.3 gibt es eine
array_key_first()
Funktion, die genau dies erreicht:Dokumentation finden Sie hier . 😉
quelle
quelle
Wenn Effizienz für Sie nicht so wichtig ist, können Sie sie
array_keys($yourArray)[0]
in PHP 5.4 (und höher) verwenden.Beispiele:
Der Vorteil gegenüber der Lösung:
ist, dass Sie
array_keys($arr)[0]
als Funktionsparameter (dhdoSomething(array_keys($arr)[0], $otherParameter)
) übergeben können.HTH
quelle
array_keys($arr)[0]
Syntax gültig?array dereferencing
. Siehe zum Beispiel: schlueters.de/blog/archives/…Bitte finden Sie Folgendes:
Arbeitsbeispiel:
quelle
quelle
max()
ersten Schlüssel eines Assoc-Arrays nicht zurück. Maximaler Rückgabewert Maximalwert einer Liste oder eines Array-ElementsDies könnte auch eine Lösung sein:
Ich habe es getestet und es funktioniert.
Arbeitscode .
quelle
Um die Lösung von Webmut zu verbessern , habe ich die folgende Lösung hinzugefügt:
Die Ausgabe für mich auf PHP 7.1 ist:
Wenn ich dies für ein Array der Größe 10000 mache, werden die Ergebnisse
Die Methode array_keys hat eine Zeitüberschreitung von 30 Sekunden (mit nur 1000 Elementen war das Timing für den Rest ungefähr gleich, aber die Methode array_keys hatte ungefähr 7,5 Sekunden).
quelle
quelle
Der beste Weg, der für mich funktioniert hat, war
array_keys
Ruft ein Array von Schlüsseln aus dem anfänglichen Array ab undarray_shift
schneidet dann den ersten Elementwert daraus. Dazu benötigen Sie PHP 5.4+.quelle
Dies ist der einfachere Weg, den ich jemals gefunden hatte. Schnell und nur zwei Codezeilen :-D
quelle
php73:
http://php.net/manual/en/function.array-key-first.php
quelle
Ein Einzeiler:
quelle
Heute musste ich nach dem ersten Schlüssel meines Arrays suchen, der von einer POST-Anfrage zurückgegeben wurde. (Und notieren Sie sich die Nummer für eine Formular-ID usw.)
Nun, ich habe Folgendes gefunden: Gibt den ersten Schlüssel des assoziativen Arrays in PHP zurück
http://php.net/key
Ich habe das getan und es funktioniert.
Vielleicht wird es 15 Minuten von einem anderen Kerl öko. CYA.
quelle
Sie können mit Ihrem Array spielen
Um das erste Element des Arrays zu erhalten, können Sie es verwenden,
current
und für das letzte Element können Sie es verwendenend
Bearbeiten
Nur um keine weiteren Stimmen für die Antwort zu erhalten, können Sie Ihren Schlüssel
array_keys
wie oben gezeigt in Wert umwandeln und verwenden.quelle