Wie erhalte ich das erste Element aus einem assoziativen PHP-Array?

146

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?

Klicken Sie auf Upvote
quelle
(Referenz) Arrays und Array-Funktionen
Gordon

Antworten:

288

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.

Soulmerge
quelle
Zu beachten:$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
Cwallenpoole
Weitere Informationen zur Reset-Funktion: www.w3schools.com/php/func_array_reset.asp
Paul Chris Jones
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:

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

Performance

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];
}
LSerni
quelle
@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:

$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";
John Kugelman
quelle
2
Wahrscheinlich, weil reset () einfacher ist.
mjs
1
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().

reset($array);
$first = current($array);
Jeremy Ruten
quelle
3
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:

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

cwallenpoole
quelle
sehr beschreibende Antwort, und es bedeutet viel für andere. Danke, Mann.
Jigar7521
7

Eine andere einfache und einfache Möglichkeit, dies zu tun, ist die Verwendung von array_values

array_values($array)[0]
Anfänger
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 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.

Beispielsweise:

if(is_array($array))
{
  reset($array);
  $first = key($array);
}
w3bMak3r
quelle
3

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.

Suryasish Dey
quelle
2

Du kannst das schaffen:

$values = array_values($array);
echo $values[0];
d0niek
quelle
2

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

Wakar Ahmad Khan
quelle
2

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));
?>
Gehen
quelle
1

Sie könnten array_shift verwenden

Cesar
quelle
4
Beachten Sie jedoch, dass auf dem Array ein Element entfernt wird.
Challet
1

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
Daantje
quelle
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:

$first = (empty($array)) ? $default : $array[array_key_first($array)];
cjc
quelle
-3

Sie können nur verwenden $array[0]. Es gibt Ihnen immer den ersten Artikel

Kareem Salem
quelle