在PHP 中, array_change_key_case()函數可以輕鬆將數組中的所有鍵名轉換為小寫或大寫。但有時我們並不想轉換整個數組的所有鍵,而是只想轉換其中的。這時候,就需要一點技巧來實現這個目標。
本文將介紹一種方法,讓你能夠“精準地”對數組中指定的鍵使用array_change_key_case()的功能。
假設我們有如下數組:
$data = [
'Name' => 'Alice',
'AGE' => 25,
'Gender' => 'Female',
'Country' => 'Canada'
];
我們只想將Name和Country的鍵名轉換為小寫,其餘保持不變。標準的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
)
如你所見,只有Name和Country被轉為了小寫,其他的鍵沒有發生變化。
如果你需要處理嵌套數組,或是鍵名的匹配需要不區分大小寫,可以對函數做進一步優化,比如使用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()的功能,但通過簡單的遍歷和判斷邏輯,我們完全可以實現相同的效果。這種方式不僅靈活,還能讓你控制轉換邏輯,非常適合實際開發場景。