php:数组键大小写*不敏感*查找?

2022-08-30 08:22:18
$myArray = array ('SOmeKeyNAme' => 7);  

我想回来。
有没有办法做到这一点,而不操纵数组?$myArray['somekeyname']7

我不创建数组,因此无法控制它的键


答案 1

选项 1 - 更改创建数组的方式

如果不进行线性搜索或更改原始数组,则无法执行此操作。最有效的方法是在查找值时插入 AND 时对键使用 strtolower

 $myArray[strtolower('SOmeKeyNAme')]=7;

 if (isset($myArray[strtolower('SomekeyName')]))
 {

 }

如果保留密钥的原始大小写对您很重要,则可以将其存储为该密钥的附加值,例如

$myArray[strtolower('SOmeKeyNAme')]=array('SOmeKeyNAme', 7);

选项 2 - 创建辅助映射

当您更新问题以表明这对您来说是不可能的时,您如何创建一个数组来提供小写和区分大小写的版本之间的映射?

$keys=array_keys($myArray);
$map=array();
foreach($keys as $key)
{
     $map[strtolower($key)]=$key;
}

现在,您可以使用它从小写密钥中获取区分大小写的密钥

$test='somekeyname';
if (isset($map[$test]))
{
     $value=$myArray[$map[$test]];
}

这样就避免了使用小写键创建数组的完整副本的需要,而这实际上是实现此目的的唯一其他方法。

选项 3 - 创建阵列的副本

如果制作阵列的完整副本不是问题,则可以使用array_change_key_case创建具有小写键的副本。

$myCopy=array_change_key_case($myArray, CASE_LOWER);

答案 2

我知道这是一个较旧的问题,但处理这个问题的最优雅的方法是使用:

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