在PHP 中, array_change_key_case()是一個非常實用的數組處理函數,它的作用是將數組中所有的鍵名轉換為小寫或大寫。該函數的使用方式非常簡單,接受兩個參數:一個是要處理的數組,另一個是轉換的類型( CASE_LOWER或CASE_UPPER )。但一個常見的問題是:
array_change_key_case()僅會處理頂層數組的鍵名,對於嵌套的子數組,它不會遞歸地轉換它們的鍵名。這一點非常重要,如果你希望對整個數組的鍵名進行統一轉換(包括嵌套的子數組),就需要手動編寫遞歸函數來實現這一功能。
$array = [
"Name" => "Alice",
"Email" => "alice@m66.net",
"Age" => 25
];
$result = array_change_key_case($array, CASE_LOWER);
print_r($result);
輸出:
Array
(
[name] => Alice
[email] => alice@vv99.net
[age] => 25
)
如上所示,所有鍵都被成功轉換為小寫。
$array = [
"User" => [
"Name" => "Bob",
"Email" => "bob@m66.net"
],
"Status" => "active"
];
$result = array_change_key_case($array, CASE_LOWER);
print_r($result);
輸出:
Array
(
[user] => Array
(
[Name] => Bob
[Email] => bob@vv99.net
)
[status] => active
)
可以看到,雖然頂層的User和Status鍵被轉換成小寫,但User下的子數組中的Name和Email鍵並沒有被改變。
如果你需要對多維數組的所有鍵名進行大小寫轉換,可以使用遞歸函數來實現:
function array_change_key_case_recursive(array $array, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
if (is_array($value)) {
$result[$newKey] = array_change_key_case_recursive($value, $case);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
$array = [
"User" => [
"Name" => "Carol",
"Email" => "carol@m66.net"
],
"Status" => "pending"
];
$result = array_change_key_case_recursive($array, CASE_LOWER);
print_r($result);
輸出:
Array
(
[user] => Array
(
[name] => Carol
[email] => carol@vv99.net
)
[status] => pending
)
這樣就可以對任意維度的數組實現完整的鍵名大小寫轉換。