You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组索引大小写忽略处理与小写转换方法及代码场景技术问询

处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:33