当前位置: 首页> 最新文章列表> 如何使用 array_change_key_case() 结合 array_diff_key() 进行键值比较?

如何使用 array_change_key_case() 结合 array_diff_key() 进行键值比较?

M66 2025-04-24

在 PHP 中,数组的键名默认是区分大小写的。这意味着如果你有两个数组,一个的键是 UserID,另一个是 userid,PHP 会认为它们是两个不同的键。如果你想要对数组的键名进行,可以结合使用 array_change_key_case()array_diff_key()

1. 函数简介

  • array_change_key_case(array $array, int $case = CASE_LOWER):将数组的所有键名转换为小写或大写。

  • array_diff_key(array $array1, array $array2):比较两个或多个数组的键名,并返回第一个数组中那些不在其他数组中的键值对。

通过先使用 array_change_key_case() 将两个数组的键名统一为小写(或大写),就可以使用 array_diff_key() 来实现大小写无关的键名比较。

2. 示例代码

<?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);

?>

3. 输出结果

Array
(
    [email] => alice@m66.net
)

如上例所示,虽然 UserIDUserName 在两个数组中键名大小写不同,但内容逻辑相同,经过 array_change_key_case() 转换后,array_diff_key() 将它们视为相同键,只有 Email 没有出现在 $array2 中,因此被保留下来。

4. 小贴士

  • 如果你需要保留原数组的键名格式(大小写),可以先将键名转换后的结果用于比较,再回过头来在原数组中提取对应的键值。

  • 这种组合非常适合处理用户输入的动态数据,比如表单提交或 API 请求时的字段校验。

5. 总结

通过将键名统一大小写后使用 array_diff_key(),可以优雅地实现大小写不敏感的键名比较逻辑。这种方式既简单又高效,是处理多源数据对比时的一个实用技巧。