开发者社区 问答 正文

PHP的:阵列键的情况下*不敏感*查找?

$myArray = array ('SOmeKeyNAme' => 7);
我想$myArray['somekeyname']回来7。 有没有一种方法,而无需操纵数组?

我不创建数组,因此无法控制其键 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 11:31:11 460 分享 版权
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);

    2020-02-09 11:31:20
    赞同 展开评论
问答分类:
PHP
问答地址: