在开发中,我们经常需要对一组键名设置统一的默认值,尤其是在缓存、配置初始化或者数据归一化的场景中。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 中一个非常实用的函数,特别适用于在初始化阶段批量填充结构。无论你是在做缓存初始化、数据归一化,还是配置预设,合理使用这个函数都能让你的代码变得更加整洁优雅。