Was ist, wenn ich den Schlüssel und den Wert erhalten möchte?
Timberman
51
PHP <7.3
Wenn Sie nicht genug über das Array wissen (Sie sind sich nicht sicher, ob der erste Schlüssel foo oder bar ist ), ist das Array möglicherweise auch leer .
Es ist daher am besten zu überprüfen, ob die Möglichkeit besteht, dass der zurückgegebene Wert der boolesche Wert FALSE ist:
$value = empty($arr)? $default : reset($arr);
Der obige Code verwendet resetund hat daher Nebenwirkungen (er setzt den internen Zeiger des Arrays zurück). Daher bevorzugen Sie möglicherweise die Verwendung, array_sliceum schnell auf eine Kopie des ersten Elements des Arrays zuzugreifen:
Wenn das Array nicht wirklich groß ist, benötigen Sie es nicht array_sliceund können lieber eine Kopie des gesamten Schlüsselarrays abrufen. Dann erhalten Sie das erste Element:
$key = count($arr)? array_keys($arr)[0]:null;
Wenn Sie jedoch ein sehr großes Array haben, array_keyserfordert der Aufruf von viel mehr Zeit und Speicher alsarray_slice (beide Funktionen durchlaufen das Array, letzteres wird jedoch beendet, sobald die erforderliche Anzahl von Elementen erfasst wurde - dies ist eines).
Eine bemerkenswerte Ausnahme ist, wenn Sie den ersten Schlüssel haben, der auf ein sehr großes und verschlungenes Objekt zeigt. In diesem Fall array_slicewird das erste große Objekt dupliziert, währendarray_keys nur die Schlüssel erfasst werden.
PHP 7.3
PHP 7.3 implementiert array_key_first()sowiearray_key_last() . Diese werden explizit bereitgestellt, um effizient auf den ersten und den letzten Schlüssel zuzugreifen, ohne den internen Status des Arrays als Nebeneffekt zurückzusetzen.
In PHP 7.3 kann also mit auf den ersten Wert von $arrayzugegriffen werden
$array[array_key_first($array)];
Sie sollten dennoch überprüfen, ob das Array nicht leer ist, da sonst eine Fehlermeldung angezeigt wird:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer gut, die andere Antwort ist nicht nur die akzeptierte , sondern ist seit acht weiteren Jahren da . Ich hebe hier die Krümel auf :-D. Aber danke für das Vertrauensvotum!
LSerni
1
Es scheint mir, dass dies die beste Antwort ist, da die einzige andere nicht veraltete, die sowohl den Schlüssel als auch den Wert angibt, die abgebrochene foreach-Schleife ist, was umständlich ist. Die anderen Antworten geben nur den Wert ohne Schlüssel an.
Sootsnoot
1
liebte diese ans, moderne Herangehensweise und mit der Zeit aktualisiert.
Sanjeet Bisht
@ LSerni Ich weiß nicht, ob du noch aktiv bist, aber ich steckte fest und dieser gut erklärte und aktualisierte Beitrag hat mich gerettet. Danke
izk
@izk Ich bin immer aktiv! :-D
LSerni
44
Gefälschte Schleife, die bei der ersten Iteration unterbrochen wird:
Weil sich die Lösung in Ihrer ersten Codezeile befindet, Sie aber weiterhin eine völlig unnötige Zeile schreiben.
Markus
21
Zurücksetzen wird den Schlüssel nicht zurückgeben
HarryFink
3
+1 für die 'Fake Loop'. Ich musste den Schlüssel und den Wert der ersten Elemente abrufen, ohne jedes Element durchzugehen. Die reset()Funktion würde nur den ersten Wert abrufen.
Phil Cross
2
+1 für die gefälschte Schleife auch, ich muss den Schlüssel behalten, so dass Zurücksetzen keine Option war
isJustMe
25
Es gibt einige Möglichkeiten. array_shift()gibt das erste Element zurück, entfernt aber auch das erste Element aus dem Array.
$first = array_shift($array);
current() gibt den Wert des Arrays zurück, auf das sein interner Speicherzeiger zeigt. Dies ist standardmäßig das erste Element.
$first = current($array);
Wenn Sie sicherstellen möchten, dass es auf das erste Element zeigt, können Sie es immer verwenden reset().
Ich mag diese Antwort als am vollständigsten, aber note reset()gibt das Element tatsächlich zurück, daher $first = current($array)ist es überflüssig , dem mit a zu folgen .
Tom Auger
9
Nur damit wir einige andere Optionen haben: reset($arr);Gut genug, wenn Sie nicht versuchen, den Array-Zeiger an Ort und Stelle zu halten, und bei sehr großen Arrays entsteht ein minimaler Overhead. Das heißt, es gibt einige Probleme damit:
reset()ist eine viel bessere Option, da sie false zurückgibt, wenn das Array leer ist. Ihre Lösung wird zum Beispiel in der Frage nicht funktionieren
Northys
1
In PHP 7+ würde so etwas funktionieren:array_values($array)[0] ?? FALSE
MarthyM
4
Testen Sie, ob die Variable a ein Array ist, bevor Sie das erste Element abrufen. Wenn Sie das Array dynamisch erstellen, wenn es auf null gesetzt ist, wird eine Fehlermeldung angezeigt.
Dies funktioniert nur, wenn sich der interne Zeiger am ersten Element befindet. Dies ist zwar gut, da die Position des Zeigers nicht zurückgesetzt wird, funktioniert jedoch nur, wenn der Zeiger bereits ruht.
CJC
1
Ab PHP 7.3.0 ist es möglich, auf das Zurücksetzen des internen Zeigers zu verzichten. Sie würden verwenden array_key_first. Wenn Sie sicher sind, dass Ihr Array Werte enthält, können Sie Folgendes tun:
$first = $array[array_key_first($array)];
Wahrscheinlicher ist, dass Sie den Fall behandeln möchten, in dem das Array leer ist:
Antworten:
reset()
gibt Ihnen den ersten Wert des Arrays, wenn Sie ein Element im Array haben:Es gibt Ihnen auch
FALSE
für den Fall, dass das Array leer ist.quelle
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7.3
Wenn Sie nicht genug über das Array wissen (Sie sind sich nicht sicher, ob der erste Schlüssel foo oder bar ist ), ist das Array möglicherweise auch leer .
Es ist daher am besten zu überprüfen, ob die Möglichkeit besteht, dass der zurückgegebene Wert der boolesche Wert FALSE ist:
Der obige Code verwendet
reset
und hat daher Nebenwirkungen (er setzt den internen Zeiger des Arrays zurück). Daher bevorzugen Sie möglicherweise die Verwendung,array_slice
um schnell auf eine Kopie des ersten Elements des Arrays zuzugreifen:Angenommen, Sie möchten sowohl den Schlüssel als auch den Wert separat abrufen, müssen Sie den vierten Parameter hinzufügen zu
array_slice
:So erhalten Sie den ersten Artikel als Paar (
key => value
):Einfache Änderung, um den letzten Artikel, Schlüssel und Wert separat zu erhalten:
Performance
Wenn das Array nicht wirklich groß ist, benötigen Sie es nicht
array_slice
und können lieber eine Kopie des gesamten Schlüsselarrays abrufen. Dann erhalten Sie das erste Element:Wenn Sie jedoch ein sehr großes Array haben,
array_keys
erfordert der Aufruf von viel mehr Zeit und Speicher alsarray_slice
(beide Funktionen durchlaufen das Array, letzteres wird jedoch beendet, sobald die erforderliche Anzahl von Elementen erfasst wurde - dies ist eines).Eine bemerkenswerte Ausnahme ist, wenn Sie den ersten Schlüssel haben, der auf ein sehr großes und verschlungenes Objekt zeigt. In diesem Fall
array_slice
wird das erste große Objekt dupliziert, währendarray_keys
nur die Schlüssel erfasst werden.PHP 7.3
PHP 7.3 implementiert
array_key_first()
sowiearray_key_last()
. Diese werden explizit bereitgestellt, um effizient auf den ersten und den letzten Schlüssel zuzugreifen, ohne den internen Status des Arrays als Nebeneffekt zurückzusetzen.In PHP 7.3 kann also mit auf den ersten Wert von
$array
zugegriffen werdenSie sollten dennoch überprüfen, ob das Array nicht leer ist, da sonst eine Fehlermeldung angezeigt wird:
quelle
Gefälschte Schleife, die bei der ersten Iteration unterbrochen wird:
Oder benutze
each()
( Warnung: veraltet ab PHP 7.2.0 ):quelle
reset()
Funktion würde nur den ersten Wert abrufen.Es gibt einige Möglichkeiten.
array_shift()
gibt das erste Element zurück, entfernt aber auch das erste Element aus dem Array.current()
gibt den Wert des Arrays zurück, auf das sein interner Speicherzeiger zeigt. Dies ist standardmäßig das erste Element.Wenn Sie sicherstellen möchten, dass es auf das erste Element zeigt, können Sie es immer verwenden
reset()
.quelle
reset()
gibt das Element tatsächlich zurück, daher$first = current($array)
ist es überflüssig , dem mit a zu folgen .Nur damit wir einige andere Optionen haben:
reset($arr);
Gut genug, wenn Sie nicht versuchen, den Array-Zeiger an Ort und Stelle zu halten, und bei sehr großen Arrays entsteht ein minimaler Overhead. Das heißt, es gibt einige Probleme damit:So gehen Sie vor, ohne den Zeiger zu ändern:
Der Vorteil von
$arr[reset(array_keys($arr))];
ist, dass eine Warnung ausgegeben wird, wenn das Array tatsächlich leer ist.quelle
Eine andere einfache und einfache Möglichkeit, dies zu tun, ist die Verwendung von array_values
quelle
reset()
ist eine viel bessere Option, da sie false zurückgibt, wenn das Array leer ist. Ihre Lösung wird zum Beispiel in der Frage nicht funktionierenarray_values($array)[0] ?? FALSE
Testen Sie, ob die Variable a ein Array ist, bevor Sie das erste Element abrufen. Wenn Sie das Array dynamisch erstellen, wenn es auf null gesetzt ist, wird eine Fehlermeldung angezeigt.
Beispielsweise:
quelle
Wir können es tun
$first = reset($array);
Anstatt
Wie
reset()
Gibt das erste Element des Arrays nach dem Zurücksetzen zurück.
quelle
Du kannst das schaffen:
quelle
Verwenden Sie die Funktion reset (), um das erste Element aus diesem Array zu entfernen, ohne den Schlüssel dafür zu kennen.
Ausgabe // 400
quelle
Sie können dies versuchen.
So erhalten Sie den ersten Wert des Arrays: -
Um den ersten Schlüssel des Arrays zu erhalten
quelle
Sie könnten array_shift verwenden
quelle
Ich mache das, um den ersten und letzten Wert zu erhalten. Dies funktioniert auch mit mehr Werten.
quelle
Ab PHP 7.3.0 ist es möglich, auf das Zurücksetzen des internen Zeigers zu verzichten. Sie würden verwenden
array_key_first
. Wenn Sie sicher sind, dass Ihr Array Werte enthält, können Sie Folgendes tun:Wahrscheinlicher ist, dass Sie den Fall behandeln möchten, in dem das Array leer ist:
quelle
Sie können nur verwenden
$array[0]
. Es gibt Ihnen immer den ersten Artikelquelle