php:数组键大小写*不敏感*查找?
$myArray = array ('SOmeKeyNAme' => 7);
我想回来。
有没有办法做到这一点,而不操纵数组?$myArray['somekeyname']
7
我不创建数组,因此无法控制它的键
$myArray = array ('SOmeKeyNAme' => 7);
我想回来。
有没有办法做到这一点,而不操纵数组?$myArray['somekeyname']
7
我不创建数组,因此无法控制它的键
如果不进行线性搜索或更改原始数组,则无法执行此操作。最有效的方法是在查找值时插入 AND 时对键使用 strtolower。
$myArray[strtolower('SOmeKeyNAme')]=7;
if (isset($myArray[strtolower('SomekeyName')]))
{
}
如果保留密钥的原始大小写对您很重要,则可以将其存储为该密钥的附加值,例如
$myArray[strtolower('SOmeKeyNAme')]=array('SOmeKeyNAme', 7);
当您更新问题以表明这对您来说是不可能的时,您如何创建一个数组来提供小写和区分大小写的版本之间的映射?
$keys=array_keys($myArray);
$map=array();
foreach($keys as $key)
{
$map[strtolower($key)]=$key;
}
现在,您可以使用它从小写密钥中获取区分大小写的密钥
$test='somekeyname';
if (isset($map[$test]))
{
$value=$myArray[$map[$test]];
}
这样就避免了使用小写键创建数组的完整副本的需要,而这实际上是实现此目的的唯一其他方法。
如果制作阵列的完整副本不是问题,则可以使用array_change_key_case创建具有小写键的副本。
$myCopy=array_change_key_case($myArray, CASE_LOWER);
我知道这是一个较旧的问题,但处理这个问题的最优雅的方法是使用:
array_change_key_case($myArray); //second parameter is CASE_LOWER by default
在您的示例中:
$myArray = array ('SOmeKeyNAme' => 7);
$myArray = array_change_key_case($myArray);
之后,$myArray将包含所有小写键:
echo $myArray['somekeyname'] will contain 7
或者,您可以使用:
array_change_key_case($myArray, CASE_UPPER);
可在此处查看文档:http://us3.php.net/manual/en/function.array-change-key-case.php