當前位置: 首頁> 最新文章列表> 如何讓array_change_key_case() 只影響部分鍵?

如何讓array_change_key_case() 只影響部分鍵?

M66 2025-04-24

在PHP 中, array_change_key_case()函數可以輕鬆將數組中的所有鍵名轉換為小寫或大寫。但有時我們並不想轉換整個數組的所有鍵,而是只想轉換其中的。這時候,就需要一點技巧來實現這個目標。

本文將介紹一種方法,讓你能夠“精準地”對數組中指定的鍵使用array_change_key_case()的功能。

問題示例

假設我們有如下數組:

 $data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

我們只想將NameCountry的鍵名轉換為小寫,其餘保持不變。標準的array_change_key_case($data, CASE_LOWER)會改變所有的鍵,這顯然不符合我們的需求。

解決方案:手動操作指定鍵

我們可以遍歷數組,判斷當前鍵是否在我們指定的列表中,如果是,就進行大小寫轉換,然後重新構建數組。

 function change_selected_keys_case(array $array, array $keysToChange, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        if (in_array($key, $keysToChange)) {
            $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        } else {
            $newKey = $key;
        }
        $result[$newKey] = $value;
    }

    return $result;
}

用法示例

$data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

$keysToChange = ['Name', 'Country'];

$modified = change_selected_keys_case($data, $keysToChange, CASE_LOWER);

print_r($modified);

輸出結果:

 Array
(
    [name] => Alice
    [AGE] => 25
    [Gender] => Female
    [country] => Canada
)

如你所見,只有NameCountry被轉為了小寫,其他的鍵沒有發生變化。

補充說明

如果你需要處理嵌套數組,或是鍵名的匹配需要不區分大小寫,可以對函數做進一步優化,比如使用strtolower()對比鍵名等。

也可以將函數改造成更通用的版本,比如支持回調函數來決定是否轉換某個鍵:

 function change_keys_with_callback(array $array, callable $shouldChange, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        $newKey = $shouldChange($key) ? 
            (($case === CASE_UPPER) ? strtoupper($key) : strtolower($key)) : 
            $key;

        $result[$newKey] = $value;
    }

    return $result;
}

用法示例:

 $modified = change_keys_with_callback($data, function($key) {
    return in_array($key, ['Name', 'Country']);
});

總結

雖然PHP 沒有原生支持只對指定鍵使用array_change_key_case()的功能,但通過簡單的遍歷和判斷邏輯,我們完全可以實現相同的效果。這種方式不僅靈活,還能讓你控制轉換邏輯,非常適合實際開發場景。