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.

Kommentar zu dem Problem
Ich habe eine vage hackish Idee von 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. Kommentarautor: Marc B
@Marc B foreach($array as $key=>$Wert) { return $key; } sollte funktionieren Kommentarautor: RiaD
@Marc B - Versuch für eine einzelne Anweisung, um den Rückgabewert. Ich konnte wickeln Sie ein foreach in call_user_func(function(){}) aber das ist ein wenig verrückt. Kommentarautor: Dan Lugg
Ich erkannte: ich glaube nicht, dass es wichtig ist, wie du es drehst und wendest, denn wenn ich mich Recht erinnere jetzt, 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. Kommentarautor: Dan Lugg
Ich erkannte noch etwas anderes: diese Frage hat sich selbst nicht mehr empfohlen werden, als wenn Sie noch mit <= 5.3, hast du Probleme. Kommentarautor: Dan Lugg

InformationsquelleAutor der Frage Dan Lugg | 2011-07-14

Schreibe einen Kommentar