在数组访问中使用变量周围的变量

时间:2016-06-10 09:30:57

标签: php arrays string associative-array

我正在阅读som遗留代码并且遇到了一个奇怪的案例:

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

当变量用作关键字时,您是否有任何明智的理由想要在变量周围加上引号(")?就像一个非常特殊的角落案例?或者完全没有理由这样做?

- 编辑 -
也许在某些旧版本的PHP中存在差异? (请记住这是遗留代码)。

3 个答案:

答案 0 :(得分:1)

有一个例子,我可以找到输出不同的地方,即$mykey = false。 (这可能不适用于你的例子,其中$ mykey是一个字符串,但是又一次:这是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"

这可以(误)用于击败我......

答案 1 :(得分:0)

不必将变量名称与数组索引中的双引号绑定:

你可以简单地用引号写出来:

$value = $my_assoc_array[$my_key];

答案 2 :(得分:-3)

如果$ my_key是整数值

,它将是不同的
$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] */