数组索引大小写忽略处理与小写转换方法及代码场景技术问询
处理PHP数组索引的大小写差异问题
嘿,你遇到的这个问题核心在于PHP数组的索引(键名)是严格区分大小写的——哪怕两个键的内容看起来几乎一样,只要大小写有区别,PHP就会把它们当成完全不同的键。就像你代码里的'What medication are you CURRENTLY taking?'和'What medication are you currently taking?',虽然只有CURRENTLY的大小写不同,但PHP会认为这是两个独立的键,所以isset判断自然会返回no。
下面给你几种实用的解决方法,你可以根据自己的场景选择:
方法1:批量转换数组所有键为小写(推荐批量处理场景)
PHP内置了array_change_key_case()函数,可以一键把数组的所有键转成小写(或大写),这样后续访问就统一用小写键即可:
// 你的原数组 $medi['What medication are you CURRENTLY taking?'] = null; // 把所有键转成小写,生成新数组 $lowercaseMedi = array_change_key_case($medi, CASE_LOWER); // 现在用全小写的键来判断 if (isset($lowercaseMedi['what medication are you currently taking?'])) { echo "isset yes"; } else { echo "isset no"; }
这个函数的第二个参数CASE_LOWER指定转小写,换成CASE_UPPER就是转大写,非常方便。
方法2:临时遍历对比(适合单次查找,不想修改原数组)
如果不想修改原数组,只是临时检查某个键是否存在(不管大小写),可以把目标键转成小写,然后遍历数组的每个键,同样转小写后对比:
$medi['What medication are you CURRENTLY taking?'] = null; $targetKey = 'What medication are you currently taking?'; $targetLower = strtolower($targetKey); $keyExists = false; foreach ($medi as $key => $value) { if (strtolower($key) === $targetLower) { $keyExists = true; // 这里还可以直接获取对应的值,比如 $foundValue = $value; break; // 找到就停止遍历,提升效率 } } if ($keyExists) { echo "isset yes"; } else { echo "isset no"; }
方法3:从源头统一键的大小写(最优预防方案)
如果这个数组是你自己生成/维护的,最好在创建数组时就把键统一转成小写(或大写),从根源上避免大小写问题:
// 创建数组时就把键转成小写 $medi[strtolower('What medication are you CURRENTLY taking?')] = null; // 访问时同样用转小写后的键判断 if (isset($medi[strtolower('What medication are you currently taking?')])) { echo "isset yes"; } else { echo "isset no"; }
这样不管后续输入的键大小写如何,只要内容一致,转成小写后就能匹配上啦。
内容的提问来源于stack exchange,提问作者morne
相关产品推荐
相关产品推荐

