當前位置: 首頁> 最新文章列表> array_change_key_case() 是否能處理數字鍵?

array_change_key_case() 是否能處理數字鍵?

M66 2025-05-12

在PHP 中,處理數組時經常會遇到鍵名(key)大小寫轉換的需求,尤其是處理從外部來源(如表單、API 返回等)獲取到的關聯數組數據時。 array_change_key_case()就是一個用來統一數組鍵名大小寫的函數。然而,一個經常被忽略但又頗為關鍵的問題是:

array_change_key_case()是否會改變數組中“數字鍵”的大小寫?

答案是:不會

官方文檔解釋

根據PHP 官方文檔array_change_key_case()的作用是:

返回其所有鍵都被轉換為大寫或小寫的數組。

但這僅適用於字符串類型的鍵,對於數字鍵,該函數不會進行任何修改。

示例說明

下面是一個例子來演示它的實際行為:

 <?php
$data = [
    "Name" => "Alice",
    "EMAIL" => "alice@example.com",
    100 => "編號",
    "AGE" => 30
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);
?>

輸出結果:

 Array
(
    [name] => Alice
    [email] => alice@example.com
    [100] => 編號
    [age] => 30
)

可以看到:

  • 所有字符串鍵(如"Name""EMAIL""AGE" )被成功轉換成了小寫;

  • 而數字鍵100保持不變,既沒有變成字符串,也沒有改變大小寫。

為什麼數字鍵不會變?

這是因為數字在PHP 中是無大小寫之分的。 PHP 中數組的鍵可以是字符串或整數(整型)。而大小寫轉換本質上只對字符串有效。因此, array_change_key_case()只會處理鍵為字符串的元素。

實際應用場景舉例

如果你通過API 請求返回了一組數組數據,想統一處理鍵名,可以使用此函數。但在處理過程中,你無需擔心數字索引的鍵被錯誤地轉換成字符串或發生變化。例如:

 <?php
$json = '{
    "UserID": 101,
    "Username": "bob",
    "Scores": {
        "0": 90,
        "1": 85,
        "2": 88
    }
}';

$data = json_decode($json, true);
$data = array_change_key_case($data, CASE_LOWER);

// 輸出 JSON 結構到前端
echo json_encode($data);
?>

前端依然可以使用.scores[0]這樣的方式訪問數據,不受影響。

如果你需要進一步處理數組中的嵌套結構(如遞歸地將所有層級的鍵名轉為小寫),可以封裝一個遞歸函數,但依舊不需要擔心數字鍵:

 function array_change_key_case_recursive($arr, $case = CASE_LOWER) {
    return array_map(function ($item) use ($case) {
        if (is_array($item)) {
            return array_change_key_case_recursive($item, $case);
        }
        return $item;
    }, array_change_key_case($arr, $case));
}

小結

  • ? array_change_key_case()只對字符串鍵有效;

  • ? 它不會修改數組中的數字鍵

  • ?? 數字鍵在PHP 中是嚴格的整型,不存在大小寫之說;

  • ?? 若需遞歸處理嵌套數組,需手動封裝遞歸函數處理字符串鍵。

這樣就可以在開發中安心使用array_change_key_case() ,而不必擔心數字鍵被誤處理啦!