Gibt den ersten Schlüssel des assoziativen Arrays in PHP zurück
Ich versuche zu erhalten, um den ersten Schlüssel eines assoziativen Arrays, ohne eine temporäre variable, die über array_keys()
oder dergleichen, zu pass-by-reference. Leider sind beide reset()
und array_shift()
nehmen Sie das array-argument per Referenz, also weder zu sein scheinen brauchbare Ergebnisse.
Mit PHP 5.4 ich werde im Himmel sein; array_keys($array)[0];
, aber leider ist das natürlich keine option.
Konnte ich erstellen Sie eine Funktion, um dem Zweck zu dienen, aber ich kann mir nur vorstellen, es gibt einige Gebräu, das PHP array_*
Funktionen, produzieren das gewünschte Ergebnis in einer einzigen Anweisung, dass ich nicht glaube, oder kommen mit.
Also:
$array = array('foo' => 'bar', 'hello' => 'world');
$firstKey = assorted_functions($array); //$firstKey = 'foo'
Den Grund für die "keine Referenz" - Klausel in meiner Frage, ist nur für die Tatsache, dass ich davon ausgehen array_keys()
werden müssen (wenn es einen Weg gibt, durch Verweis übergeben wird, bitte Feuer Weg)
Ich würde verwenden key()
, aber das erfordert eine reset()
da bin ich mir nicht sicher, wo der Mauszeiger zum Zeitpunkt dieser operation.
Nachtrag
Dass ich bis auf eine Erkenntnis, die ich erst kürzlich hatte: wie ich bereits erwähnt in den Kommentaren, es werde den Speicher verwenden, der alle die gleichen, so dass, wenn das ist ein Anliegen, diese Frage hat keine Lösung.
$a = range(0,99999);
var_dump(memory_get_peak_usage()); //int(8644416)
$k = array_keys($a)[0];
var_dump(memory_get_peak_usage()); //int(17168824)
Ich wusste diese, als PHP nicht über einen solchen Optimierungsmöglichkeiten, aber fand es gerechtfertigt, explizit erwähnt.
Durch die Kürze der akzeptierte Antwort ist aber auch schön, und werde arbeiten, wenn Sie arbeiten mit einigermaßen große arrays.
foreach($array as &$key) { return $key; }
möglicherweise vollenden, was Sie wollen, aber ich bin zu faul um es zu testen, und nicht ganz sicher, was Sie wollen. foreach
in call_user_func(function(){})
aber das ist ein wenig verrückt. array_keys()
erzeugt eine Kopie der array-Schlüssel im Speicher sowieso, auch mit einer sofortigen dereferenzieren. Die single-expression Kürze ist schön, aber der Speicherverbrauch immer noch passiert. InformationsquelleAutor der Frage Dan Lugg | 2011-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl
array_shift(array_keys($array));
arbeiten,current(array_keys($array));
ist schneller als er nicht vorab den internen Zeiger.Entweder man wird aber funktionieren.
Update
Als @TomcatExodus darauf hingewiesen,
array_shift();
erwartet ein array per Referenz übergeben, so dass das erste Beispiel wird ein Fehler ausgegeben. Am besten stick mitcurrent();
InformationsquelleAutor der Antwort adlawson
Können Sie zurücksetzen und Schlüssel:
oder Sie können eine Funktion verwenden:
InformationsquelleAutor der Antwort Brian Graham
InformationsquelleAutor der Antwort RiaD
()
noch eine temporäre erforderlich, die aber möglicherweise einen viel kleineren Aufwand als die Verwendungarray_keys()
.InformationsquelleAutor der Antwort Orbling
Was ist mit array_slice (in Kombination mit array_keys für assoziative arrays)?
Gibt als Ausgabe (zumindest bei mir):
InformationsquelleAutor der Antwort PrinsEdje80