在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 :