
Comparación de colecciones basadas en claves con el método diffKeys de Laravel
- Publicado el 05 febrero, 2025
- Palabras: 71
El sistema de colección de Laravel incluye el poderoso método diffKeys, que le ayuda a identificar diferencias entre colecciones en función de sus claves en lugar de valores.

#Uso básico
El método diffKeys compara la colección con otra colección o con un array PHP simple en función de sus claves. Este método devolverá los pares clave/valor de la colección original que no están presentes en la colección dada:
$collection = collect([
'one' => 10,
'two' => 20,
'three' => 30,
'four' => 40,
'five' => 50,
]);
$diff = $collection->diffKeys([
'two' => 2,
'four' => 4,
'six' => 6,
'eight' => 8,
]);
$diff->all();
// ['one' => 10, 'three' => 30, 'five' => 50]
#Ejemplo práctico
A continuación se explica cómo puede usarlo en un administrador de configuración:
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 required configuration keys: ' .
$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()
];
}
}
El método diffKeys facilita el seguimiento de los cambios y la validación de configuraciones en función de sus claves.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión