Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do I handle multi-dimensional configuration arrays when merging in Laravel 11


How do I handle multi-dimensional configuration arrays when merging in Laravel 11


In Laravel 11, you can use the new `fluent()` helper function to easily work with multi-dimensional configuration arrays when merging them together.

Here's an example of how to merge multi-dimensional configuration arrays using the `fluent()` helper:

php
$defaultConfig = [
    'database' => [
        'default' => 'mysql',
        'connections' => [
            'mysql' => [
                'driver' => 'mysql',
                'host' => 'localhost',
                'database' => 'my_app',
                'username' => 'root',
                'password' => '',
            ],
        ],
    ],
    'mail' => [
        'driver' => 'smtp',
        'host' => 'smtp.example.com',
        'port' => 587,
    ],
];

$overrideConfig = [
    'database' => [
        'connections' => [
            'mysql' => [
                'password' => 'secret',
            ],
        ],
    ],
    'mail' => [
        'port' => 465,
    ],
];

$mergedConfig = fluent($defaultConfig)
    ->merge(fluent($overrideConfig))
    ->all();

In this example:

1. We define a `$defaultConfig` array with some default configuration values for the database and mail settings.

2. We define an `$overrideConfig` array with some values that should override the defaults, such as the MySQL password and the mail port.

3. We use the `fluent()` helper to create a fluent instance of the `$defaultConfig` array.

4. We call the `merge()` method on the fluent instance, passing in a fluent instance of the `$overrideConfig` array. This will recursively merge the two arrays, with the values from `$overrideConfig` taking precedence.

5. Finally, we call the `all()` method to convert the fluent instance back to a regular array and store it in the `$mergedConfig` variable.

The resulting `$mergedConfig` array will contain the merged configuration values, with the overrides from `$overrideConfig` applied to the multi-dimensional structure of the `$defaultConfig` array[2].

This approach allows you to easily merge complex, multi-dimensional configuration arrays while preserving the nested structure of the data.

Citations:
[1] https://stackoverflow.com/questions/29529414/laravel-configuration-multidimensional-array-for-different-environment
[2] https://laravel-news.com/laravel-11-2-0
[3] https://laravel.com/docs/11.x/database
[4] https://laravel.com/docs/11.x/configuration
[5] https://laravel.com/docs/11.x/helpers