在 PHP 中,数组的键名默认是区分大小写的。这意味着如果你有两个数组,一个的键是 UserID,另一个是 userid,PHP 会认为它们是两个不同的键。如果你想要对数组的键名进行,可以结合使用 array_change_key_case() 和 array_diff_key()。
array_change_key_case(array $array, int $case = CASE_LOWER):将数组的所有键名转换为小写或大写。
array_diff_key(array $array1, array $array2):比较两个或多个数组的键名,并返回第一个数组中那些不在其他数组中的键值对。
通过先使用 array_change_key_case() 将两个数组的键名统一为小写(或大写),就可以使用 array_diff_key() 来实现大小写无关的键名比较。
<?php
// 原始数组
$array1 = [
'UserID' => 1,
'UserName' => 'Alice',
'Email' => 'alice@m66.net',
];
$array2 = [
'userid' => 2,
'username' => 'Bob',
'Phone' => '1234567890',
];
// 将两个数组的键都转换为小写
$lower1 = array_change_key_case($array1, CASE_LOWER);
$lower2 = array_change_key_case($array2, CASE_LOWER);
// 找出 $array1 中那些在 $array2 中没有的键(忽略大小写)
$diffKeys = array_diff_key($lower1, $lower2);
// 输出差异键名和对应的值
print_r($diffKeys);
?>
Array
(
[email] => alice@m66.net
)
如上例所示,虽然 UserID 和 UserName 在两个数组中键名大小写不同,但内容逻辑相同,经过 array_change_key_case() 转换后,array_diff_key() 将它们视为相同键,只有 Email 没有出现在 $array2 中,因此被保留下来。
如果你需要保留原数组的键名格式(大小写),可以先将键名转换后的结果用于比较,再回过头来在原数组中提取对应的键值。
这种组合非常适合处理用户输入的动态数据,比如表单提交或 API 请求时的字段校验。
通过将键名统一大小写后使用 array_diff_key(),可以优雅地实现大小写不敏感的键名比较逻辑。这种方式既简单又高效,是处理多源数据对比时的一个实用技巧。