2010-03-23 27 views
7

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

+0

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

Antwort

10

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(); 
+0

Hey, schlau! 'list()' hört nie auf, mich zu überraschen. +1. –

+1

reset() und end() erfordern, dass die Argumente Referenzen sind. Sie erhalten einen E_STRICT Hinweis in den letzten Versionen von PHP. – goat

+1

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

2

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

+2

Es ist scheiße, aber das ist der einzige Weg, dies zu tun. Einer der vielen Gründe, PHP zu hassen. –

+0

@Luke wahr, aber nicht * das * schlechtes Imo. Wer weiß, kann es in PHP 7 behoben werden :) –

+0

@Luke - das ist ein bisschen stark, nicht wahr? – nickf

1
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]; 
1

Was genau entspricht Ihren Erwartungen ist:

echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey')); 

antwortete Kinetix Kin, Taipei

1

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

+0

auch, sieht aus wie Unterstützung für diese wurde vor kurzem Php hinzugefügt? http://wiki.php.net/rfc/functionarraydereferencing – mutexkid

Verwandte Themen