在開發中,我們經常需要對一組鍵名設置統一的默認值,尤其是在緩存、配置初始化或者數據歸一化的場景中。 PHP 內置的array_fill_keys()函數可以非常優雅地解決這個問題,幫助我們減少冗餘代碼,提高代碼可讀性與執行效率。
本文將以設置緩存結構的默認值為例,講解如何使用array_fill_keys()實現這一目標。
array_fill_keys()是PHP 提供的一個數組函數,用來用指定的值填充數組中指定的鍵。
函數定義:
array array_fill_keys(array $keys, mixed $value)
$keys :一個包含所有鍵名的數組。
$value :要賦給每個鍵的默認值。
示例:
$keys = ['user_1', 'user_2', 'user_3'];
$defaultValue = null;
$cache = array_fill_keys($keys, $defaultValue);
print_r($cache);
輸出:
Array
(
[user_1] =>
[user_2] =>
[user_3] =>
)
設想一個典型的場景:你正在構建一個系統緩存結構,其中需要根據用戶ID 批量初始化緩存數據的默認值為一個預定義數組,比如:
$defaultCacheValue = [
'profile' => null,
'settings' => [],
'last_login' => null,
];
你有多個用戶ID:
$userIds = [101, 102, 103, 104];
如果你手動初始化這些結構,將變得冗長且不易維護。使用array_fill_keys()可以輕鬆搞定:
$keys = array_map(function ($id) {
return "user_cache_$id";
}, $userIds);
$cacheStructure = array_fill_keys($keys, $defaultCacheValue);
print_r($cacheStructure);
輸出結果:
Array
(
[user_cache_101] => Array
(
[profile] =>
[settings] => Array
(
)
[last_login] =>
)
[user_cache_102] => Array
(
[profile] =>
[settings] => Array
(
)
[last_login] =>
)
...
)
如果你的用戶ID 是從數據庫或API 獲取的,也可以結合array_column()等函數動態處理:
// 假設從 API 返回了以下結構
$userData = [
['id' => 201, 'name' => 'Alice'],
['id' => 202, 'name' => 'Bob'],
['id' => 203, 'name' => 'Charlie'],
];
$userIds = array_column($userData, 'id');
$keys = array_map(function ($id) {
return "user_cache_$id";
}, $userIds);
$defaultCache = [
'profile_url' => 'https://m66.net/user/default',
'status' => 'offline',
'messages' => [],
];
$cache = array_fill_keys($keys, $defaultCache);
print_r($cache);
不可變結構注意事項:如果你對填充的默認值進行修改,它會影響所有鍵,因為數組是引用同一個結構。如果你希望每個鍵都有獨立的結構,需要手動複製:
$cache = [];
foreach ($keys as $key) {
$cache[$key] = $defaultCache; // 如果 defaultCache 是對象,還需深拷貝
}
與array_map 聯用更強大:結合array_map 、 array_column 、 array_combine等函數可以寫出非常簡潔靈活的數據處理邏輯。
array_fill_keys()是PHP 中一個非常實用的函數,特別適用於在初始化階段批量填充結構。無論你是在做緩存初始化、數據歸一化,還是配置預設,合理使用這個函數都能讓你的代碼變得更加整潔優雅。