Порівняння колекцій за ключами за допомогою методу diffKeys у Laravel

Колекція Laravel (Laravel’s collection) містить потужний метод diffKeys, який допомагає визначити різниці між колекціями на основі їхніх ключів, а не значень.

Основне використання

Порівняння колекцій за їхніми ключами:

$collection = collect([  
 'one' => 10,  
 'two' => 20,  
 'three' => 30,  
 'four' => 40,  
 'five' => 50,  
]);  

$diff = $collection->diffKeys([  
 'two' => 2,  
 'four' => 4,  
 'six' => 6,  
]);  
// Результат: ['one' => 10, 'three' => 30, 'five' => 50]

Приклад із реального життя

Ось як можна використати цей метод у менеджері конфігурацій:

class ConfigurationManager  
{  
 public function findRemovedSettings(array $oldConfig, array $newConfig)  
 {  
 return collect($oldConfig)  
 ->diffKeys($newConfig)  
 ->map(function ($value, $key) {  
 return [  
 'key' => $key,  
 'old_value' => $value,  
 'removed_at' => now()  
 ];  
 });  
 }  

 public function validateRequiredKeys(array $config)  
 {  
 $required = [  
 'database' => null,  
 'cache' => null,  
 'queue' => null  
 ];  
 $missing = collect($required)  
 ->diffKeys($config)  
 ->keys();  
 if ($missing->isNotEmpty()) {  
 throw new InvalidConfigurationException(  
 'Відсутні обов’язкові ключі конфігурації: ' .   
 $missing->implode(', ')  
 );  
 }  
 return true;  
 }  

 public function syncConfigurations(array $source, array $target)  
 {  
 $added = collect($source)->diffKeys($target);  
 $removed = collect($target)->diffKeys($source);  

 return [  
 'added' => $added->all(),  
 'removed' => $removed->all(),  
 'changes' => $added->count() + $removed->count()  
 ];  
 }  
}

Метод diffKeys робить простішим відстеження змін і перевірку конфігурацій на основі їхніх ключів.

Якщо цей посібник був корисним для вас, підпишіться на мою щоденну розсилку і слідкуйте за мною в X/Twitter та Bluesky. Це дуже допомагає!

Перекладено з: Key-Based Collection Comparison with Laravel’s diffKeys Method

Leave a Reply

Your email address will not be published. Required fields are marked *