當前位置: 首頁> 最新文章列表> array_change_key_case() 適用於多維數組嗎?

array_change_key_case() 適用於多維數組嗎?

M66 2025-04-25

在PHP 中, array_change_key_case()是一個非常實用的數組處理函數,它的作用是將數組中所有的鍵名轉換為小寫或大寫。該函數的使用方式非常簡單,接受兩個參數:一個是要處理的數組,另一個是轉換的類型( CASE_LOWERCASE_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
)

可以看到,雖然頂層的UserStatus鍵被轉換成小寫,但User下的子數組中的NameEmail鍵並沒有被改變。

如何實現多維數組鍵名大小寫轉換?

如果你需要對多維數組的所有鍵名進行大小寫轉換,可以使用遞歸函數來實現:

 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
)

這樣就可以對任意維度的數組實現完整的鍵名大小寫轉換。