$myArray = array ('SOmeKeyNAme' => 7);  

我要$myArray['somekeyname']7

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

推荐答案

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

如果不进行线性搜索或更改原始数组,您就无法做到这一点.最有效的方法是在插入和查找值时对键使用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);

Php相关问答推荐

Symfony序列化程序未序列化所有类字段

如何根据键上的特定标准对对象数组进行排序?

文件大小在php下载读取文件中不可见

如何让PHP变量跨越多个脚本调用?

如何删除WordPress用户的个人资料描述或其他个人资料字段中的链接?

Laravel Livewire如何在数组值上使用IF、ELSE条件

如何将WooCommerce产品属性术语名称显示为链接术语?

WooCommerce在购买后多次重定向

如何从该字符串中删除这些图标转换的ASCII问号字符?

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

如何在微软图形API中使用用户S访问令牌或基于租户ID的访问令牌?

如何在laravel中添加延迟?

在WooCommerce购物车页面应用优惠券不会';t刷新总计

既然setSQLLogger()已被弃用,如何使用中间件在 Doctrine 3 中记录查询执行时间?

Woocommerce 中为空时隐藏显示变体自定义字段数据

在 php 中生成 MAC ISO/IEC 9797-1

PHP - 计算非数值数组

同时执行odbc_execute、odbc_fetch_row和odbc_result

如何使用属性创建属性预设?

构建 [Controller] 时目标 [Interface] 不可实例化