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

新手上路,请多包涵

这些索引到 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
)

原文由 svec 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 296
2 个回答

参见上面的@svec 和@jeremy。所有数组索引的类型首先是“int”,然后是“string”类型,并且将在 PHP 认为合适的情况下转换为该类型。

性能方面,\(index 应该比 "\)index” 和 “{$index}” 快(它们是相同的)。

一旦你开始一个双引号字符串,PHP 将进入插值模式并首先将其视为一个字符串,但会从本地范围内寻找变量标记($、{} 等)来替换。这就是为什么在大多数讨论中,真正的“静态”字符串应该始终是单引号,除非您需要像“\n”或“\t”这样的转义快捷方式,因为 PHP 不需要在运行时尝试插入字符串,并且完整的字符串可以静态编译。

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

原文由 Justin 发布,翻译遵循 CC BY-SA 2.5 许可协议

我相信从性能的角度来看,\(array\["\)index”] 比 \(array\[\)index] 更快请参阅优化 PHP 代码性能的最佳实践

不要盲目相信您阅读的所有内容…我认为您误解了这一点。文章说 \(array\['index'\] 比 \)array[index] 快,其中 index 是一个 字符串,而不是一个变量。那是因为如果你不把它用引号括起来,PHP 会寻找一个常量 var 并且找不到,所以假设你打算把它变成一个字符串。

原文由 Akira 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题