这两个索引之间有什么区别,如果有,哪个更好用?如果有的话,想要一些关于性能和差异的信息。
$array[$data]
$array["$data"]
提前致谢!
*编辑; 刚刚遇到$array["{$data}"]
,有没有关于那个的信息?
就个人而言,我会选择第一个版本,因为清晰。PHP 会为你整理:
$a = range(1,10);
$data = 2;
echo $a[$data];//3
$b = array('foo' => 'bar');
echo $b[$data];//notice undefined offset, echoes nothing!
$data = 'foo';
echo $b[$data];//echo bar
其他几个原因:'$data'
!== "$data"
,因为单引号和双引号之间存在差异。所以第二种方式更容易出错。
使用数组很麻烦:
$a[$data['key']];//is clear: use value of $data -> key
相比:
$a["{$data[key]}"];
//or
$a["{$data['key']}"];
个人喜好还有更多空间。虽然这似乎是一件好事,但是当在团队中工作时,使用像 Git 这样的 SVC 系统,这很快就会被证明是一种痛苦……相信你!
笔记:
关于您对问题的编辑("{$var}"
)。这称为Complex (curly) syntax,它是为了避免歧义:
echo "some string with $an[array][value]";
解析器应该做什么?它应该回显:
"some string with <value of$an>[array][value]";
将数组键访问器视为字符串常量,或者您的意思是:
"some string with <$an[array][value]>";
它可以回显:"some string with foobar"以及"some string with array[array][value]",这就是你对表达式进行分组的原因:
echo "some string with {$an[array][value]}";
双引号允许变量完全按原样工作,因此在您的特定情况下,没有区别。
但是,使用实际文本会在关联数组中产生很大的不同:
$array[fluffeh]; // Will not work
$array['fluffeh']; will reference the key called fluffeh in the array.
双引号内的变量就像它们只是字符串的一部分一样工作。但是,将变量放在单引号内将无法正常工作。
$var='fluffeh';
$array[$var]; // Will find the element 'fluffeh'
$array["$var"]; // Will find the element 'fluffeh'
$array['$var']; // Will try to find an element called '$var'