Hintergrund
In jeder anderen Programmiersprache, die ich regelmäßig verwende, ist es einfach, den Rückgabewert einer Funktion zu bearbeiten, ohne eine neue Variable zu deklarieren, die das Funktionsergebnis enthält.
In PHP scheint dies jedoch nicht so einfach zu sein:
Kann jemand vorschlagen, wie man das in PHP macht?
PHP kann nicht auf Array-Ergebnisse einer Funktion zugreifen. Manche Leute nennen das ein Problem, andere akzeptieren das einfach so, wie die Sprache entworfen wurde. Also macht PHP Sie unwesentliche Variablen erstellen, nur um die Daten zu extrahieren, die Sie brauchen.
Sie müssen also tun.
%Vor%Array Dereferenzierung ist ab PHP 5.4 möglich:
mit PHP 5.3 erhalten Sie
%Vor%Ursprüngliche Antwort:
Dies wurde gefragt bereits vor . Die Antwort ist nein. Es ist nicht möglich.
Nach Zitat Andi Gutmans zu diesem Thema:
Dies ist eine bekannte Feature-Anforderung wird aber in PHP 5.0 nicht unterstützt. ich Ich kann dir nicht sagen, ob es jemals sein wird unterstützt. Es erfordert einige Nachforschungen und viele Gedanken.
Sie finden auch diese Anfrage eine Zahl der Zeiten in der PHP Bugtracker. Für technische Details empfehle ich den offiziellen RFC und / oder fragen Sie auf PHP Interna .
Nun, je nach Situation können Sie eine der folgenden Lösungen verwenden:
%Vor%Oder Sie können bestimmte Werte aus dem zurückgegebenen Array mithilfe von list () :
abrufen %Vor%Bearbeiten: Der Beispielcode für each () , den ich früher gab, war falsch. each () gibt ein Schlüssel / Wert-Paar zurück. Es könnte also einfacher sein, foreach () zu verwenden:
%Vor%Leider gibt es dazu keinen Weg, obwohl es in den meisten anderen Programmiersprachen ist.
Wenn Sie wirklich einen einzigen Liner machen wollten, könnten Sie eine Funktion namens a () erstellen und etwas wie
machen %Vor%Aber ansonsten wird func () [1] in PHP nicht unterstützt.
Wie andere bereits erwähnt haben, ist dies nicht möglich. Die Syntax von PHP erlaubt dies nicht. Ich habe jedoch einen Vorschlag, der das Problem aus der anderen Richtung anspricht.
Wenn Sie die getBarArray
-Methode kontrollieren und Zugriff auf die PHP-Standardbibliothek haben (die auf vielen PHP 5.2.X-Hosts installiert ist und standardmäßig mit PHP 5.3 installiert wird), sollten Sie stattdessen ein ArrayObject
zurückgeben ein natives PHP-Array / Sammlung. ArrayObjects
haben eine offetGet
-Methode, die zum Abrufen eines beliebigen Index verwendet werden kann, sodass Ihr Code etwa wie
Und wenn Sie jemals ein natives Array / eine systemeigene Sammlung benötigen, können Sie die Ergebnisse immer umsetzen.
%Vor%Eigentlich habe ich eine Bibliothek geschrieben, die solches Verhalten erlaubt:
Funktioniert mit allem: Funktionen, Methoden. Caches, also so schnell wie PHP selbst:)
Sie können solche Ausdrücke in PHP nicht ketten, also müssen Sie das Ergebnis von array_test()
in einer Variablen speichern.
Versuchen Sie Folgendes:
%Vor%Meine übliche Lösung ist eine generische Funktion wie diese
%Vor%und dann
%Vor%als Bonus, dies vermeidet auch 'undefined index' Warnung, wenn Sie es nicht brauchen.
Aus Gründen, warum foo()[x]
nicht funktioniert, ist die Antwort ziemlich unhöflich und wird hier nicht veröffentlicht. ;)
Dies sind einige Möglichkeiten, Ihr Problem anzugehen.
Zuerst können Sie Variablen direkt benennen, wenn Sie ein Array von Variablen zurückgeben, die nicht Teil der Auflistung sind, aber jeweils unterschiedliche Bedeutung haben.
Zwei weitere Möglichkeiten sind das Zurückgeben des Ergebnisses, bei dem es sich um eine Sammlung von Werten handelt.
%Vor%Extrem Ghetto, aber es kann nur mit PHP gemacht werden. Dies nutzt eine Lambda-Funktion (die in PHP 5.3 eingeführt wurde). Sehe und staune (und, äh, erschrocken):
%Vor%Die Längen, die wir durchlaufen müssen, um etwas so Schönes in den meisten anderen Sprachen zu tun.
Für die Aufzeichnung mache ich etwas, das dem ähnlich ist, was Nolte tut. Entschuldigung, wenn ich jemandem die Augen bluten ließ.
Nach weiterer Forschung glaube ich, dass die Antwort nein ist, eine temporäre Variable wie diese ist in der Tat die kanonische Methode, mit einem Array umzugehen, das von einer Funktion zurückgegeben wird.
Sieht so aus, als würde sich das ab PHP 5.4 ändern.
Auch diese Antwort war ursprünglich für diese Version der Frage:
Kurze Antwort:
Ja. Es ist möglich, mit dem Rückgabewert einer Funktion in PHP zu arbeiten, solange das Funktionsergebnis und Ihre spezielle PHP-Version dies unterstützen.
Referenzbeispiel2:
%Vor%Fälle:
Es gibt drei Möglichkeiten, dasselbe zu tun:
Wie Chacha102 sagt, verwenden Sie eine Funktion, um den Indexwert zurückzugeben:
%Vor%Dann können Sie verwenden:
%Vor%um das erste Element usw. zu erhalten.
Ein fauler Weg mit current und array_slice:
%Vor%Verwenden Sie dieselbe Funktion, um sowohl das Array als auch den Wert zurückzugeben:
%Vor%Dann können Sie das gesamte Array und ein einzelnes Array-Element erhalten.
%Vor%oder
%Vor%Bisher in PHP 5.3 mussten Sie dies tun:
%Vor% Ergebnis: 2
Ab PHP 5.4 ist es möglich, ein Array wie folgt zu dereferenzieren:
%Vor% Ergebnis: 2
Ab PHP 5.5:
Sie können sogar clever werden:
%Vor% Ergebnis: 2
Sie können dasselbe auch mit Strings machen. Es heißt String-Dereferenzierung:
%Vor% Ergebnis: H