在 PHP 中处理数组时,函数调用的顺序对结果常常有着至关重要的影响。array_change_key_case() 和 array_unique() 是两个常用于数组操作的函数,但你是否想过,当这两个函数一起使用时,它们的顺序会影响结果吗?本文将带你深入理解它们的用法和顺序差异。
array_change_key_case(array $array, int $case = CASE_LOWER): array
该函数用于将数组的键名统一转换为小写(CASE_LOWER)或大写(CASE_UPPER)。这是在处理不一致的键名(如用户输入的参数)时非常有用的工具。
$data = [
"Name" => "Alice",
"AGE" => 25,
"Gender" => "Female"
];
$result = array_change_key_case($data, CASE_LOWER);
// 结果:['name' => 'Alice', 'age' => 25, 'gender' => 'Female']
array_unique(array $array, int $flags = SORT_STRING): array
该函数用于移除数组中的重复值,只保留第一个出现的键值对。需要注意,它只作用于“值”,而不是键名。
$data = ["apple", "banana", "Apple", "banana"];
$result = array_unique($data);
// 默认是大小写敏感的:['apple', 'banana', 'Apple']
让我们结合这两个函数来看,如果顺序不同,结果会发生怎样的变化。
$data = [
"Name" => "Alice",
"name" => "Bob",
"AGE" => 25,
"age" => 30
];
$data = array_change_key_case($data, CASE_LOWER);
$data = array_unique($data);
print_r($data);
输出结果:
Array
(
[name] => Alice
[age] => 25
)
在这种情况下,先统一了键名的大小写,"Name" 和 "name" 被视为同一个键,因此后者被覆盖。之后使用 array_unique() 移除的是值上的重复,但影响不大,因为键已经统一。
$data = [
"Name" => "Alice",
"name" => "Bob",
"AGE" => 25,
"age" => 30
];
$data = array_unique($data);
$data = array_change_key_case($data, CASE_LOWER);
print_r($data);
输出结果:
Array
(
[name] => Alice
[age] => 25
[age_1] => 30
)
在这种方式下,先保留了值唯一的键值对,然后再统一键名。结果会出现键名冲突,比如 "AGE" 和 "age" 都保留了,但转换成小写后键名重复,PHP 会自动在数组中处理这个冲突(如用 age_1 等临时键名标记)。
这取决于你处理数据的意图:
如果你更关注键名的一致性(比如要用键名来检索值),应当先使用 array_change_key_case()。
如果你更关注去除重复的值,并且键名对你而言不重要,那么顺序影响不大,但建议先 array_unique(),以保留更多原始数据结构。
假设你从一个表单中接收用户提交的数据,其中有大小写不一致的键和重复的值,你想将其统一后发到 API 接口 https://m66.net/api/submit.php: