Глибока маніпуляція масивами за допомогою методу replaceRecursive у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 28 грудня, 2024
Метод replaceRecursive у Laravel є потужним інструментом для оновлення вкладених масивів, зберігаючи при цьому незмінені значення. Досліджуйте, як ефективно використовувати цей метод у системах налаштувань, читаючи нашу статтю!

Метод replaceRecursive у Laravel надає потужне рішення для оновлення вкладених масивів без втрати незмінних значень, що є особливо корисним при роботі зі складними структурами конфігурацій.

$collection = collect([
    'user' => [
        'name' => 'John',
        'settings' => [
            'theme' => 'dark',
            'notifications' => true,
        ]
    ]
]);
 
$updated = $collection->replaceRecursive([
    'user' => [
        'settings' => [
            'theme' => 'light'
        ]
    ]
]);

Розгляньмо практичний приклад із системою налаштувань інформаційної панелі:

<?php
 
namespace App\Services;
use Illuminate\Support\Collection;
 
class DashboardConfigurationService
{
    public function mergeUserPreferences(array $defaultConfig, array $userPreferences): array
    {
        return collect($defaultConfig)->replaceRecursive($userPreferences)->all();
    }
 
    public function getConfiguration(User $user): array
    {
        $defaultConfig = [
            'layout' => [
                'sidebar' => [
                    'position' => 'left',
                    'width' => 250,
                    'collapsed' => false
                ],
                'theme' => [
                    'mode' => 'light',
                    'color' => 'blue',
                    'font_size' => 14
                ],
                'widgets' => [
                    'weather' => true,
                    'calendar' => true,
                    'notifications' => true
                ]
            ]
        ];
 
        return $this->mergeUserPreferences(
            $defaultConfig,
            $user->dashboard_preferences ?? []
        );
    }
}

ReplaceRecursive забезпечує елегантний спосіб обробки глибоких оновлень масивів, зберігаючи при цьому незазначені значення. Це ідеальне рішення для управління злиттями конфігурацій і системами переваг.