【问题标题】:Why are php array keys case sensitive?为什么php数组键区分大小写?
【发布时间】:2013-11-07 21:30:34
【问题描述】:

在查看一些代码并尝试解决一些问题时,我遇到了一个问题。为什么 PHP 数组键区分大小写?似乎有好处

$array = array(
   "Key"=>"Value",
   "key"=>"Value",
)

是同一个键。有人可以向我解释将这两个键分开的好处吗?

【问题讨论】:

  • 键是区分大小写的,因为"key" !== "Key",因为它们是不同的字符串。
  • 我认为有人有责任解释使它们不区分大小写的好处。添加不区分大小写会减慢查找速度 - 如果您希望它们不区分大小写,只需在使用之前将密钥转换为小写即可。
  • 好处是不需要确保用户在正确的情况下输入他们的数据......例如在 url 字符串中:file.php?var1=37&Var2=73&VAr=9
  • PHP 关联数组实际上是哈希映射。而且大多数人希望那些以区分大小写的方式处理字符串..
  • @RobCozzens 你的例子是一个非常具体的用例。 PHP 数组是通用的。并且您始终可以按照 halfer 的建议将该 URL 字符串小写,这只是一行代码。

标签: php


【解决方案1】:

PHP 数组 are implemented with hash tables。哈希表的工作方式,首先是:它对输入进行哈希处理并将其用作索引来找到插入对象的正确内存位置。

现在假设您的数组不区分大小写。您现在必须进行 2^(字符串的长度)哈希查找,而不是进行单个哈希查找。此外,在这些地点中,您选择哪一个?突然间,你优雅、简单的哈希表变得更加复杂,无论是在计算上还是在实现上。

此外,在大多数其他语言中,Keykey 的处理方式不同。 PHP 当然并不总是遵守最小意外原则,但在这种情况下它确实如此——而且它应该是这样的。

正如其他用户所指出的,如果您愿意,这种行为很容易获得:只需在插入和/或引用之前将您的密钥转换为小写即可。

【讨论】:

  • 或者它可以在散列之前将密钥转换为小写
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2011-11-14
  • 2013-10-31
相关资源
最近更新 更多