In PHP wie kann ich auf die Werte eines Arrays ohne eckige Klammern um den Schlüssel zugreifen? Mein spezielles Problem ist, dass ich auf die Elemente eines Arrays zugreifen möchte, die von einer Funktion zurückgegeben werden. Say-Funktion (args) gibt ein Array zurück. Warum ist $ var = function (args) [0]; schrie mich über die eckigen Klammern? Kann ich etwas wie $ var = function (args) .value (0); oder fehlt mir etwas sehr einfach?Zugriff auf Array-Werte ohne eckige Klammern in PHP
Antwort
Wie die anderen gesagt haben, Sie haben ziemlich viel eine temporäre Variable verwenden:
$temp = myFunction();
$value = $temp[0];
Aber, wenn die Struktur kennen des zurückgegebenen Arrays ist es möglich, die temporäre Variable zu vermeiden.
Wenn Sie nur das erste Element:
$value = reset(myFunction());
Wenn Sie das letzte Mitglied:
$value = end(myFunction());
Wenn Sie eines wollen zwischendurch:
// second member
list(, $value) = myFunction();
// third
list(, , $value) = myFunction();
// or if you want more than one:
list(, , $thirdVar, , $fifth) = myFunction();
Hey, schlau! 'list()' hört nie auf, mich zu überraschen. +1. –
reset() und end() erfordern, dass die Argumente Referenzen sind. Sie erhalten einen E_STRICT Hinweis in den letzten Versionen von PHP. – goat
Ja, ich habe das mit temporären Variablen gemacht, aber ich fragte mich, ob ich das wirklich brauchte. Jetzt frage ich mich nur, warum ich es tun muss. aber auf jeden Fall ist Ihre Verwendung von list() ziemlich clever. Vielen Dank! – amb
In PHP, wenn ein Array als Funktion Ergebnis zu erzielen, können Sie leider einen zusätzlichen Schritt zu tun haben:
$temp_array = function($args);
$var = $temp_array[0];
Für Objekte, diese wurde in PHP 5 gelockert können Sie tun:
$echo function($args)->property;
(vorausgesetzt function
gibt ein Objekt natürlich.)
Es ist scheiße, aber das ist der einzige Weg, dies zu tun. Einer der vielen Gründe, PHP zu hassen. –
@Luke wahr, aber nicht * das * schlechtes Imo. Wer weiß, kann es in PHP 7 behoben werden :) –
@Luke - das ist ein bisschen stark, nicht wahr? – nickf
function getKey($array, $key){
return $array[$key];
}
$var = getKey(myFunc(args), $key);
Es gibt keine Möglichkeit zu tun dies ohne eine Benutzerfunktion leider hinzuzufügen. Es ist einfach nicht Teil der Syntax.
Man konnte immer tun es einfach, die alte Art und Weise Art und Weise
$array = myFunc();
$value = $array[0];
Was genau entspricht Ihren Erwartungen ist:
echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey'));
antwortete Kinetix Kin, Taipei
, wenn Sie dies wünschen, ist es wahrscheinlich am besten, ein Objekt zu zurückkehren (leider, seine völlig lahm php muß nicht diese unterstützen). Heres eine verrückte Art und Weise ich in der Lage war allerdings herausfinden, aus der Neuheit (bitte nicht tun!):
function returnsArray(){
return array("foo" => "bar");
}
echo json_decode(json_encode((object)returnsArray()))->foo;
//prints 'bar'
So yeah..until sie Unterstützung hinzufügen für Array in PHP dereferencing, ich glaube, Sie sollten wahrscheinlich nur werfen die Rückkehr Array als Objekt:
return (object)array("foo" => "bar");
und dann können Sie tun returnsArray() -> foo, da php entspannt für Objekte dereferencing aber nicht Arrays .. oder natürlich eine Wrapper-Funktion schreiben, wie andere vorgeschlagen haben.
auch, sieht aus wie Unterstützung für diese wurde vor kurzem Php hinzugefügt? http://wiki.php.net/rfc/functionarraydereferencing – mutexkid
- 1. Eckige Klammern in Vektoren
- 2. Eckige Klammern in Delphi?
- 3. Eckige Klammern in XML?
- 4. Javascript - lesen JSON Array ohne eckige Klammern
- 5. Assembly Eckige Klammern
- 6. eckige Klammern in versteckten HTML-Eingabe-Feldern
- 7. Wie eckige Klammern als Anführungszeichen in Pandas.read_csv
- 8. Unterschied zwischen String [] (eckigen Klammern) und String (ohne eckige Klammern) in Java
- 9. Wie stelle ich eckige Klammern ([]) in RDoc?
- 10. Syntax Erklärung: eckige Klammern in Swift
- 11. PHP-Arrays - eckige Klammern vs geschweifte Klammern ($ Array [$ i] vs $ Array {$ i})
- 12. Bash doppelte eckige Klammern Regex Ausgabe
- 13. Zugriff auf Mysql mit JQuery ohne PHP
- 14. Doppelte eckige Klammern mit array.push() --- JavaScript
- 15. Erstellen eines JavaScript-Arrays aus PHP - eckige Klammern und geschweifte Klammern
- 16. Beim Teilen auf Facebook, eckige Klammern anstelle von Inhalt zeigen
- 17. .htaccess Entfernen Sie eckige Klammern von URLs
- 18. Entfernen doppelte Anführungszeichen und Eckige Klammern JSON
- 19. Eckige Klammern im Namensattribut des Eingabe-Tags
- 20. Eckige Klammern eine Liste Perl Indizierung wörtliche
- 21. Wie ohne eckige Klammern String und Liste auf derselben Zeile drucken
- 22. Wie setze ich geschweifte Klammern/Klammern/eckige Klammern/arithmetische Operatoren Syntaxfarbe in VIM?
- 23. PHP If/Else-Anweisungen ohne Klammern
- 24. PHP-Array-Zugriff ohne Anführungszeichen
- 25. geschweifte Klammern PHP auf Klasse
- 26. eckige Klammern nicht in Listenkomprehensionen erforderlich, wenn in einer Funktion
- 27. DOM-Element nach ID suchen, wenn ID eckige Klammern enthält?
- 28. Verwenden Sie eckige Klammern, um Dinge in Javascript zu verketten?
- 29. Wie paarweise eckige Klammern mit anderer Syntax mit sed ersetzen?
- 30. Änderungsdatum ohne Zugriff auf OS
php bezieht sich darauf als Funktion Array-Referenzierung. Es ist in PHP seit Version 5 enthalten.4 http://php.net/manual/en/migration54.new-features.php – Steve