es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupa objetos en arrays para un campo específico.

Después de combinar dos arreglos de objetos, obtengo un arreglo estructurado de la siguiente manera. Me gustaría agrupar los objetos con el mismo ID y sumar su cantidad.

[
    {
        id  :   1
        nome    :   T.SHIRT
        quantita    :   2

    }, 
    {
        id  :   2
        nome    :   Sweatshirt
        quantita    :   4

    },
  {
        id  :   1
        nome    :   T.SHIRT
        quantita    :   4

    }
]

Me gustaría obtener un arreglo como este.

[
    {
        id  :   1
        nome    :   T.SHIRT
        quantita    :   6

    }, 
  {
        id  :   2
        nome    :   Sweatshirt
        quantita    :   4

    },
]   

¿Cómo puedo hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agrupar objetos con la misma ID y agregar a su cantidad, puedes recorrer el arreglo fusionado y usar la ID como clave en un nuevo arreglo asociativo. Luego, para cada objeto en el arreglo fusionado, puedes verificar si la ID ya existe como clave en el arreglo asociativo. Si existe, puedes agregar la cantidad del objeto actual a la cantidad existente. Si no existe, puedes agregar un nuevo par clave-valor al arreglo asociativo. Finalmente, puedes convertir el arreglo asociativo de vuelta a un arreglo indexado numéricamente usando la función array_values.

    Aquí tienes un ejemplo de código:

    $merged = [
        [
            'id' => 1,
            'nome' => 'T.SHIRT',
            'quantita' => 2
        ],
        [
            'id' => 2,
            'nome' => 'Sweatshirt',
            'quantita' => 4
        ],
        [
            'id' => 1,
            'nome' => 'T.SHIRT',
            'quantita' => 4
        ]
    ];
    
    $grouped = [];
    
    foreach ($merged as $item) {
        $id = $item['id'];
        if (isset($grouped[$id])) {
            $grouped[$id]['quantita'] += $item['quantita'];
        } else {
            $grouped[$id] = $item;
        }
    }
    
    $grouped = array_values($grouped);
    

    El arreglo resultante $grouped tendrá la estructura deseada:

    [
        [
            'id' => 1,
            'nome' => 'T.SHIRT',
            'quantita' => 6
        ],
        [
            'id' => 2,
            'nome' => 'Sweatshirt',
            'quantita' => 4
        ]
    ]
    

Comments are closed.