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.

Comparación de colecciones basadas en claves con el método diffKeys de Laravel

#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.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Artículos relacionados

Generar colecciones sobre la marcha con el método times de Laravel
2154

Generar colecciones sobre la marcha con el método times de Laravel

Conversión de valores en colecciones con el método wrap de Laravel
594

Conversión de valores en colecciones con el método wrap de Laravel

Filtrado de colecciones más preciso con whereNotInStrict de Laravel
395

Filtrado de colecciones más preciso con whereNotInStrict de Laravel

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión