首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP数组索引:$array[$index] vs $array["$index"] vs $array["{$index}"]

PHP数组索引:$array[$index] vs $array["$index"] vs $array["{$index}"]
EN

Stack Overflow用户
提问于 2008-08-09 05:01:39
回答 7查看 85.3K关注 0票数 34

这些索引到PHP数组的方法之间有什么区别:

代码语言:javascript
复制
$array[$index]
$array["$index"]
$array["{$index}"]

我感兴趣的是性能和功能上的差异。

更新:

(回应@Jeremy)我不确定这是对的。我运行了以下代码:

代码语言:javascript
复制
  $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);

并得到以下输出:

代码语言:javascript
复制
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
)
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-08-09 05:55:24

参见上面的@svec和@jeremy。所有数组索引都是'int‘类型,然后是'string’类型,并将根据PHP的需要转换为该类型。

在性能方面,$index应该比"$index“和"{$index}”(它们是一样的)更快。

一旦你启动了一个双引号字符串,PHP就会进入插值模式,首先把它当作一个字符串,然后从局部作用域中寻找变量标记($,{},等等)来替换。这就是为什么在大多数讨论中,真正的'static‘字符串应该始终是单引号,除非您需要像"\n“或"\t”这样的转义快捷键,因为PHP不需要在运行时尝试插入字符串,并且可以静态编译完整的字符串。

在这种情况下,双引号将首先将$index复制到该字符串中,然后返回该字符串,而直接使用$index将只返回该字符串。

票数 34
EN

Stack Overflow用户

发布于 2008-08-09 06:10:22

我计算了使用索引的3种方式,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
$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"

代码语言:javascript
复制
$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"

代码语言:javascript
复制
$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次,得到了相同的结果。)

票数 29
EN

Stack Overflow用户

发布于 2008-08-09 07:05:44

我相信从性能的角度来看,$array"$index“比$array$index更快见优化$index代码性能的最佳实践

不要盲目相信你读到的每一件事。我想你误解了这点。这篇文章说$ $arrayindex‘index’比索引是一个字符串索引,而不是一个变量的更快。这是因为如果不用引号将其括起来,PHP会查找一个常量变量,但找不到,因此假定您打算将其设置为一个字符串。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档