什么是最好的方法?

时间:2013-09-20 10:56:10

标签: php arrays

这两个索引之间有什么区别,如果有,哪个更好用?想了解一些关于性能和差异的信息。

$array[$data]
$array["$data"]

提前致谢!

*编辑;刚刚遇到$array["{$data}"],有关那个的任何信息?

2 个答案:

答案 0 :(得分:5)

就个人而言,由于清晰,我会选择第一个版本。 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]>";

它可以回应:“foobar的一些字符串”以及“一些带有数组[array] [value]”的字符串,这就是你将表达式分组的原因:

echo "some string with {$an[array][value]}";

答案 1 :(得分:1)

双引号允许变量完全按原样工作,因此在您的特定情况下,没有区别。

但是,使用实际文本会在关联数组中产生很大的差异:

$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'