检查数组键是否存在,不区分大小写

2 php arrays validation string-comparison psr-7

我尝试以不区分大小写的方式找到正确的方法来检查数组键是否存在。

我有一个数组 - 一个 HTTP 标头列表:

$headers = [
    'User-Agent' => 'Mozilla',
];
Run Code Online (Sandbox Code Playgroud)

基本上,我希望能够给出这样的东西(带有小字符“u”):

$keyExists = array_key_exists('user-Agent', $headers);
Run Code Online (Sandbox Code Playgroud)

true在应用 a 时接收布尔值var_dump

var_dump($keyExists); // I need TRUE to be returned.
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

Qir*_*rel 5

您可以使用array_change_key_case()将所有大小写转换为小写,并检查array_key_exists(). array_change_key_case()默认情况下将所有键更改为小写(但您也可以将它们更改为大写,方法是向CASE_UPPER第二个参数提供 -CASE_LOWER是默认值)。

这当然意味着您要查找的键必须是小写的,当您将它传递给array_key_exists(). 你通过一个变量,你可以使用strtolower()它来确保它是。

$headers = array(
    'User-Agent' => 'Mozilla',
);
$headers = array_change_key_case($headers); // Convert all keys to lower
$keyExists = array_key_exists('user-agent', $headers);
var_dump($keyExists);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,如果您有多个键在小写时变得相同(例如,如果您有Foofoo作为原始数组中的键),则只保留数组中的最后一个值。正如手册中所读:“如果一个数组的索引在运行此函数时相同(例如“key”和“kEY”),则数组中后面的值将覆盖其他索引。

  • @Qirel 好吧,我不认为测试所有提出的解决方案(包括阅读文档)会花费这么多时间 - 肯定超过 10 分钟:-) 所有解决方案都是可行且有趣的。但是,最终,我决定选择您的想法,因为它优雅而扎实,在这种情况下,这正是我所需要的。非常感谢您花费时间进行解释和实施。PS:你提供了一个漂亮的答案。尤其是最后一句话非常值得了解!祝你好运! (2认同)
  • @ishegg 好吧,每个用户的回答或评论都应该得到答案,因为她/他的贡献是一份礼物,送给您,SO,心中只有一个想法:帮助。我现在刚刚学会了一个新词:“Kudos”。我很感激,谢谢;-) (2认同)