當前位置: 首頁> 最新文章列表> 使用array_fill() 快速初始化配置項的默認數組結構

使用array_fill() 快速初始化配置項的默認數組結構

M66 2025-05-14

在開發PHP 項目時,我們經常會遇到需要為多個模塊、字段、功能設置默認配置項的場景。傳統方式可能是一個個手動賦值,寫法冗長且不利於維護。幸運的是,PHP 提供了一個非常實用的函數—— array_fill() ,可以幫助我們。

什麼是array_fill()

array_fill(int $start_index, int $count, mixed $value): array
該函數返回一個用指定的值填充的數組。

示例:

 $config = array_fill(0, 5, 'default');
print_r($config);

輸出:

 Array
(
    [0] => default
    [1] => default
    [2] => default
    [3] => default
    [4] => default
)

這意味著我們可以用一行代碼就生成一個含有五個“default”值的數組,非常高效。

實際案例:初始化模塊配置項

假設我們有一個系統,有多個模塊,每個模塊都需要有enabledendpoint這兩個配置項,默認值分別為false和空字符串。使用傳統方式初始化可能如下:

 $config = [
    'user' => ['enabled' => false, 'endpoint' => ''],
    'blog' => ['enabled' => false, 'endpoint' => ''],
    'shop' => ['enabled' => false, 'endpoint' => ''],
];

看起來還好,但一旦模塊數量變多,這種方式就變得不夠優雅。

我們可以藉助array_fill_keys()搭配array_fill() ,快速生成默認結構:

 $modules = ['user', 'blog', 'shop', 'forum', 'gallery'];

$default = [
    'enabled' => false,
    'endpoint' => '',
];

// 使用 array_fill_keys 初始化配置結構
$config = array_fill_keys($modules, $default);

print_r($config);

輸出:

 Array
(
    [user] => Array
        (
            [enabled] => 
            [endpoint] => 
        )

    [blog] => Array
        (
            [enabled] => 
            [endpoint] => 
        )

    ...
)

這樣寫的好處是結構清晰,便於批量管理,而且隨著模塊名的變化,只需改動$modules數組即可。

進階示例:結合URL 生成帶默認值的配置數組

如果你的每個模塊都需要一個默認的API 地址,並以域名m66.net作為基礎,可以如下處理:

 $modules = ['user', 'blog', 'shop'];

$config = [];

foreach ($modules as $module) {
    $config[$module] = [
        'enabled' => false,
        'endpoint' => "https://api.m66.net/{$module}"
    ];
}

print_r($config);

輸出:

 Array
(
    [user] => Array
        (
            [enabled] => 
            [endpoint] => https://api.m66.net/user
        )

    [blog] => Array
        (
            [enabled] => 
            [endpoint] => https://api.m66.net/blog
        )

    ...
)

總結

array_fill()array_fill_keys()是在PHP 中快速生成結構化數組的利器,特別適用於初始化具有統一格式的配置項。通過巧妙地結合模塊名稱和默認值,我們可以極大提升代碼的可維護性與清晰度,減少重複勞動。

下次你再寫配置初始化時,別忘了這對高效的工具組合!