PHP:数组键不区分大小写查找?

82
$myArray = array ('SOmeKeyNAme' => 7);  
我希望$myArray['somekeyname']返回7。 有没有一种方法可以在不操作数组的情况下实现这一点?
我没有创建数组,因此无法控制其键。

6
我认为如果不修改或复制数组的话是不可能做到的。你可以使用PHP函数array_change_key_case复制数组并改变键的大小写。 - ynh
这是最受欢迎的答案,但它是以评论的形式写出来的...我问过以上内容是否可行,答案是:不行。 - shealtiel
一切皆有可能。PHP 是开源的,所以只需要改变一些内部设置并重新编译即可 ;) - dev-null-dweller
我想知道匹配多个键对于你的实际任务的潜力。如果你知道这些键都是唯一的,比如在它们全部转换为小写后,那么你就不需要更新所有的键,只需要迭代数组并对键执行不区分大小写的比较即可。重要的是,你应该尽快使用breakreturn来找到匹配项,以便不进行不必要的迭代。如果你需要适应匹配多个键的可能性,那么你将需要迭代所有的键,并强制所有键转换为小写/大写实际上会破坏你的数据。 - mickmackusa
12个回答

0
在我的情况下,我想要一个有效的解决方案,因为我的程序已经使用foreach循环从客户数据中创建了数组,而且大小写未知,我希望保留客户的大小写以便稍后在程序中显示。
我的解决方案是创建一个单独的数组$CaseMap,将给定的小写键映射到数组中使用的混合大小写键(这里省略了不相关的代码):
$CaseMap=[];
foreach ($UserArray as $Key=>$Value)
    $CaseMap[strtolower($Key)]=$Key;

那么查找就像这样:

$Value=$UserArray[$CaseMap("key")];

内存开销仅为$CaseMap数组,该数组将短键映射到短键。

如果我没有使用foreach的情况下,我不确定PHP是否有更有效的方法来生成$CaseMap。


-1

我知道这已经过时了,但是如果有其他人需要一种快速简便的方法来实现此操作而不必实际更改原始数组:

function array_key_i($needle, $haystack){
  $key=array_search(strtolower($search), array_combine(array_keys($array),array_map('strtolower', array_keys($array))));
  return ($key!==false);
}

$array=array('TeSt1'=>'maybe');
$search='test1';

array_key_i($search, $array); // returns true

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