这些索引到PHP数组的方法之间有什么区别:
$array[$index]
$array["$index"]
$array["{$index}"]我感兴趣的是性能和功能上的差异。
更新:
(回应@Jeremy)我不确定这是对的。我运行了以下代码:
$array = array(100, 200, 300);
print_r($array);
$idx = 0;
$array[$idx] = 123;
print_r($array);
$array["$idx"] = 456;
print_r($array);
$array["{$idx}"] = 789;
print_r($array);并得到以下输出:
Array
(
[0] => 100
[1] => 200
[2] => 300
)
Array
(
[0] => 123
[1] => 200
[2] => 300
)
Array
(
[0] => 456
[1] => 200
[2] => 300
)
Array
(
[0] => 789
[1] => 200
[2] => 300
)发布于 2008-08-09 05:55:24
参见上面的@svec和@jeremy。所有数组索引都是'int‘类型,然后是'string’类型,并将根据PHP的需要转换为该类型。
在性能方面,$index应该比"$index“和"{$index}”(它们是一样的)更快。
一旦你启动了一个双引号字符串,PHP就会进入插值模式,首先把它当作一个字符串,然后从局部作用域中寻找变量标记($,{},等等)来替换。这就是为什么在大多数讨论中,真正的'static‘字符串应该始终是单引号,除非您需要像"\n“或"\t”这样的转义快捷键,因为PHP不需要在运行时尝试插入字符串,并且可以静态编译完整的字符串。
在这种情况下,双引号将首先将$index复制到该字符串中,然后返回该字符串,而直接使用$index将只返回该字符串。
发布于 2008-08-09 06:10:22
我计算了使用索引的3种方式,如下所示:
for ($ii = 0; $ii < 1000000; $ii++) {
// TEST 1
$array[$idx] = $ii;
// TEST 2
$array["$idx"] = $ii;
// TEST 3
$array["{$idx}"] = $ii;
}第一组测试使用$idx=0,第二组使用$idx="0",第三组使用$idx="blah"。使用microtime() diffs进行计时。我使用的是WinXP、PHP5.2、Apache2.2和Vim。:-)
结果如下:
使用$idx = 0
$array[$idx] // time: 0.45435905456543 seconds
$array["$idx"] // time: 1.0537171363831 seconds
$array["{$idx}"] // time: 1.0621709823608 seconds
ratio "$idx" / $idx // 2.3191287282497
ratio "{$idx}" / $idx // 2.3377348193858使用$idx = "0"
$array[$idx] // time: 0.5107250213623 seconds
$array["$idx"] // time: 0.77445602416992 seconds
$array["{$idx}"] // time: 0.77329802513123 seconds
ratio "$idx" / $idx // = 1.5163855142717
ratio "{$idx}" / $idx // = 1.5141181512285使用$idx = "blah"
$array[$idx] // time: 0.48077392578125 seconds
$array["$idx"] // time: 0.73676419258118 seconds
$array["{$idx}"] // time: 0.71499705314636 seconds
ratio "$idx" / $idx // = 1.5324545551923
ratio "{$idx}" / $idx // = 1.4871793473086因此,至少在我的机器上,$array[$idx]无疑是性能竞赛的获胜者。(结果非常可重复性,顺便说一句,我运行了3到4次,得到了相同的结果。)
发布于 2008-08-09 07:05:44
我相信从性能的角度来看,$array"$index“比$array$index更快见优化$index代码性能的最佳实践
不要盲目相信你读到的每一件事。我想你误解了这点。这篇文章说$ $arrayindex‘index’比索引是一个字符串索引,而不是一个变量的更快。这是因为如果不用引号将其括起来,PHP会查找一个常量变量,但找不到,因此假定您打算将其设置为一个字符串。
https://stackoverflow.com/questions/6628
复制相似问题