PHP数组键名大小写敏感是语言默认行为,'Name'与'name'视为不同键;需用array_change_key_case统一大小写后再array_merge实现业务所需的不敏感合并。

PHP 合并数组时,键名本身是大小写敏感的——这不是 `array_merge()` 的“问题”,而是 PHP 数组底层行为决定的。也就是说,`'Name'` 和 `'name'` 被视为两个完全不同的键,不会自动归并或覆盖。所谓“大小写不敏感合并”,其实是业务需求,需手动实现逻辑统一。
明确键名大小写敏感是默认行为
PHP 数组的字符串键名严格区分大小写:
- `$arr['user']` 和 `$arr['User']` 是两个独立键,可同时存在
- `array_merge(['User' => 'A'], ['user' => 'B'])` 结果为
['User' => 'A', 'user' => 'B'],不会覆盖 - 这与变量名、数组索引规则一致,属于语言设计,无法通过函数参数关闭
按需统一键名大小写再合并
若你希望合并时把 `'name'`、`'Name'`、`'NAME'` 视为同一键(例如配置项归一化),需先标准化键名:
- 用
array_change_key_case($arr, CASE_LOWER)将所有键转为小写(或CASE_UPPER) - 对多个数组分别处理后再合并,避免冲突
- 示例:
$b = ['name' => 'Jerry', 'ROLE' => 'admin'];
// 统一小写键名
$a_lower = array_change_key_case($a, CASE_LOWER);
$b_lower = array_change_key_case($b, CASE_LOWER);
// 合并:后数组值覆盖前数组同名键
$merged = array_merge($a_lower, $b_lower);
// 结果:['name' => 'Jerry', 'age' => 25, 'role' => 'admin']
?>
合并后手动处理重复键(保留/取并集/报错)
若原始键大小写混杂且需策略性处理(如只保留首出现值、取最大值、或合并值为数组),不能依赖 `array_merge` 自动逻辑,应自行遍历:
立即学习“PHP免费学习笔记(深入)”;
- 收集所有输入数组,用 `foreach` + `strtolower()` 提取标准化键
- 用一个临时数组记录已见键,遇到重复时按需跳过、覆盖或累积
- 适合场景:解析 HTTP 头、表单字段、YAML/JSON 配置导入等
注意函数名和常量不受影响
别混淆概念:`array_merge` 函数名本身不区分大小写(`ARRAY_MERGE` 也能调),但它的操作对象——数组键名——始终敏感。同样,`define('DEBUG', true)` 定义的常量名也区分大小写,而 `true`/`TRUE` 值不区分。



















