为什么 PHP 数组键区分大小写?

9

在查看一些代码并尝试修复一些问题时,我有一个问题。为什么PHP数组键是区分大小写的?似乎有好处的

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

两个键不同的好处是什么?能否有人解释一下?


7
密钥是大小写敏感的,因为 "key" 不等于 "Key",因为它们是不同的字符串。 - gen_Eric
7
我认为有人需要解释一下使它们不区分大小写的好处是什么。添加不区分大小写会减慢查找速度 - 如果您希望它们不区分大小写,只需在使用之前将键转换为小写即可。 - halfer
1
好处在于不需要确保用户以正确的大小写输入数据...例如在URL字符串中:file.php?var1=37&Var2=73&VAr=9 - Rob Cozzens
2
PHP的关联数组实际上是哈希映射。大多数人都希望这些数组对字符串进行区分大小写的处理。 - lethal-guitar
@RobCozzens 嗯,你的例子是一个非常具体的用例。PHP数组应该是通用的。而且你可以像halfer建议的那样将URL字符串转换为小写,这只需要一行代码。 - lethal-guitar
1个回答

18

PHP数组是使用哈希表实现的。哈希表的工作方式,大致上是将输入进行哈希操作,然后使用该哈希值作为索引查找正确的内存位置来插入对象。

现在想象一下你的数组不区分大小写。那么你需要进行2^(字符串长度)次哈希查找才能找到所需位置。而且,在这些位置中,你应该选择哪一个?突然间,你优雅而简单的哈希表变得更加复杂,既在计算上也在实现上。

此外,在大多数其他语言中,“Key”和“key”被视为不同的键,但PHP并非总是遵循最小惊喜原则,但在这种情况下,它确实遵循了——这就是正确的做法。

正如其他用户指出的那样,如果你需要这种行为,这种行为很容易获得:只需在插入和/或引用键之前将它们转换为小写即可。


9
它可以在散列之前将密钥转换为小写。 - Rob Cozzens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接