Wenn ich ein Array hätte wie:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Und ich wollte das erste Element aus diesem Array herausholen, ohne den Schlüssel dafür zu kennen. Wie würde ich das tun? Gibt es dafür eine Funktion?
Wenn ich ein Array hätte wie:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Und ich wollte das erste Element aus diesem Array herausholen, ohne den Schlüssel dafür zu kennen. Wie würde ich das tun? Gibt es dafür eine Funktion?
Antworten:
reset() gibt Ihnen den ersten Wert des Arrays, wenn Sie ein Element im Array haben:
$value = reset($array);
Es gibt Ihnen auch FALSEfür den Fall, dass das Array leer ist.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
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:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
So erhalten Sie den ersten Artikel als Paar ( key => value):
$item = array_slice($arr, 0, 1, true);
Einfache Änderung, um den letzten Artikel, Schlüssel und Wert separat zu erhalten:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
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 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];
}
Gefälschte Schleife, die bei der ersten Iteration unterbrochen wird:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
Oder benutze each()( Warnung: veraltet ab PHP 7.2.0 ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
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.
$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().
reset($array);
$first = current($array);
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:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
So gehen Sie vor, ohne den Zeiger zu ändern:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
Der Vorteil von $arr[reset(array_keys($arr))];ist, dass eine Warnung ausgegeben wird, wenn das Array tatsächlich leer ist.
Eine andere einfache und einfache Möglichkeit, dies zu tun, ist die Verwendung von array_values
array_values($array)[0]
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
array_values($array)[0] ?? FALSE
Wir können es tun
$first = reset($array);
Anstatt
reset($array);
$first = current($array);
Wie reset()
Gibt das erste Element des Arrays nach dem Zurücksetzen zurück.
Verwenden Sie die Funktion reset (), um das erste Element aus diesem Array zu entfernen, ohne den Schlüssel dafür zu kennen.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
Ausgabe // 400
Sie können dies versuchen.
So erhalten Sie den ersten Wert des Arrays: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
Um den ersten Schlüssel des Arrays zu erhalten
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
Sie könnten array_shift verwenden
Ich mache das, um den ersten und letzten Wert zu erhalten. Dies funktioniert auch mit mehr Werten.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
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:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
Sie können nur verwenden $array[0]. Es gibt Ihnen immer den ersten Artikel