检查数组键是否存在,不区分大小写
Check if array key exists, case insensitive
我尝试以 CASE-INSENSITIVE 的方式找到正确的方法来检查数组键是否存在。
我有一个数组 - 一个 HTTP 列表 headers:
$headers = [
'User-Agent' => 'Mozilla',
];
基本上,我希望能够给出这样的东西(小字符'u'):
$keyExists = array_key_exists('user-Agent', $headers);
并在应用 var_dump
时接收布尔值 true
:
var_dump($keyExists); // I need TRUE to be returned.
感谢您的帮助。
您可以使用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);
值得注意的是,如果你有多个键在小写时变得相同(例如,如果你有 Foo
和 foo
作为原始数组中的键),只有最后一个值在数组中将保留。正如手册中所读:“如果一个数组的索引通过此函数运行一次相同(例如"keY"和"kEY"),则该值稍后在数组中将覆盖其他索引。"
创建一个数组,提供小写和区分大小写版本之间的映射
$headers = array(
'User-Agent' => 'Mozilla',
);
$keys=array_keys($headers);
$map=array();
foreach($keys as $key)
{
$map[strtolower($key)]=$key;
}
$name=strtolower('user-Agent');
var_dump(isset($map[$name]))
你可以使用array_change_key_case方法(有点贵)把所有的key都转成小写再比较。或者为它编写自己的函数。
<?php
function lowerCase($header,$compareKey){
foreach ($header as $key => $value) {
if(strtolower($key)==strtolower($compareKey)){
return true;
}
}
return false;
}
$headers = array(
'User-Agent' => 'Mozilla',
);
$keyExists = array_key_exists(strtolower('user-Agent'), array_change_key_case($headers,CASE_LOWER));
var_dump($keyExists);
$keyExists2 = lowerCase($headers,'user-Agent');
var_dump($keyExists2);
?>
我尝试以 CASE-INSENSITIVE 的方式找到正确的方法来检查数组键是否存在。
我有一个数组 - 一个 HTTP 列表 headers:
$headers = [
'User-Agent' => 'Mozilla',
];
基本上,我希望能够给出这样的东西(小字符'u'):
$keyExists = array_key_exists('user-Agent', $headers);
并在应用 var_dump
时接收布尔值 true
:
var_dump($keyExists); // I need TRUE to be returned.
感谢您的帮助。
您可以使用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);
值得注意的是,如果你有多个键在小写时变得相同(例如,如果你有 Foo
和 foo
作为原始数组中的键),只有最后一个值在数组中将保留。正如手册中所读:“如果一个数组的索引通过此函数运行一次相同(例如"keY"和"kEY"),则该值稍后在数组中将覆盖其他索引。"
创建一个数组,提供小写和区分大小写版本之间的映射
$headers = array(
'User-Agent' => 'Mozilla',
);
$keys=array_keys($headers);
$map=array();
foreach($keys as $key)
{
$map[strtolower($key)]=$key;
}
$name=strtolower('user-Agent');
var_dump(isset($map[$name]))
你可以使用array_change_key_case方法(有点贵)把所有的key都转成小写再比较。或者为它编写自己的函数。
<?php
function lowerCase($header,$compareKey){
foreach ($header as $key => $value) {
if(strtolower($key)==strtolower($compareKey)){
return true;
}
}
return false;
}
$headers = array(
'User-Agent' => 'Mozilla',
);
$keyExists = array_key_exists(strtolower('user-Agent'), array_change_key_case($headers,CASE_LOWER));
var_dump($keyExists);
$keyExists2 = lowerCase($headers,'user-Agent');
var_dump($keyExists2);
?>