Колекція 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