2016-06-10 5 views
2

ich som Legacy-Code bin zu lesen und kommen einen merkwürdigen Fall über:Mit Zitat markiert um eine Variable in Array-Zugriff

$my_assoc_array; /* User defined associative array */ 
$my_key; /* User defined String */ 
$value = $my_assoc_array["$my_key"]; 

Gibt es einen cleveren Grund, warum Sie Zitatzeichen (") um sich haben möchte die Variable, wenn sie als Schlüssel verwendet wird? Wie ein ganz besonderer Eckfall? Oder gibt es dafür überhaupt keinen Grund?

- EDIT -
Vielleicht in einer alten Version von PHP gab es einen Unterschied? (Denken Sie daran, das ist Legacy-Code).

+0

Kein Unterschied .. – Rizier123

+0

In diesem speziellen Beispiel ist es sinnlos, aber deins ist ein sehr sehr striktes Szenario. –

+0

@JonStirling Wann kann es einen Sinn haben, dies zu tun? – Krycke

Antwort

1

Es gibt ein Beispiel, dass ich finden kann, wo die Ausgabe unterscheidet, die wenn $mykey = false ist. (welche vielleicht gilt nicht für Ihr Beispiel, in dem $ mykey ein String ist, aber dann wieder: das ist die wilde wilde Welt von PHP)

<?php 
$arr = array("1"=>"b", "0"=>"a"); 
$mykey = false; 
var_dump($arr[$mykey]); 
// returns "a" 
var_dump($arr["$mykey"]); 
// gives Undefined index error 

$mykey = true; 
var_dump($arr[$mykey]); 
// returns "b" 
var_dump($arr["$mykey"]); 
// returns "b" 

Was diese (Fehl-) sein kann, für Schläge mich verwendet. ..

1

Es ist nicht notwendig, Variablennamen mit doppelten Anführungszeichen innerhalb Array-Index zu binden:

Sie können einfach mit aus Anführungszeichen schreiben:

$value = $my_assoc_array[$my_key]; 
-2

es anders sein wird, wenn $ my_key ist ein Integer-Wert

$my_key = 3; /* User defined String */ 
$value = $my_assoc_array["$my_key"]; /* returns $my_assoc_array["3"] */ 
$value = $my_assoc_array[$my_key]; /* returns $my_assoc_array[3] */ 
+0

Sie können (afaik) ein Array nicht mit einem Schlüssel von '3' _und_ einem Schlüssel von' "3" erzeugen, so dass in diesem Beispiel beide Zeilen eins sind. –

+0

Ah mein Schade, tut mir leid – monterico