Tengo lo siguiente en una matriz $ orders.

Array
(
    [0] => Array
        (
            [ORDER_NUMBER] => 0001
            [NAME]         => Customer 1
            [LINE_TOTAL]   => 100.00
        )
    [1] => Array
        (
            [ORDER_NUMBER] => 0001
            [NAME]         => Customer 1
            [LINE_TOTAL]   => 300.00
        )
    [2] => Array
        (
            [ORDER_NUMBER] => 0002
            [NAME]         => Customer 2
            [LINE_TOTAL]   => 550.00
        )
    [3] => Array
        (
            [ORDER_NUMBER] => 0003
            [NAME]         => Customer 3
            [LINE_TOTAL]   => 300.00
        )
 )

Quiero agruparlos por el número de pedido y sumar los totales de línea para que la matriz final se vea así. El idioma es PHP.

Array
(
    [0] => Array
        (
            [ORDER_NUMBER] => 0001
            [NAME]         => Customer 1
            [TOTAL]        => 400.00 // 300 + 100 = 400
        )
    [1] => Array
        (
            [ORDER_NUMBER] => 0002
            [NAME]         => Customer 2
            [TOTAL]        => 550.00
        )
    [2] => Array
        (
            [ORDER_NUMBER] => 0003
            [NAME]         => Customer 3
            [TOTAL]        => 300.00
        )
 )

Si alguien pudiera ayudar, sería genial, he intentado algunas cosas diferentes pero no obtengo el resultado que necesito.

Salud

-1
Matty Smith 1 sep. 2020 a las 15:27

1 respuesta

La mejor respuesta

Esto recorrerá los pedidos y los colocará bajo índices asociativos basados ​​en su ORDER_NUMBER. Si ya existe uno, le agregará el nuevo LINE_TOTAL.

$orders;

$newOrders;

foreach ($orders as $order) {
    $id = $order['ORDER_NUMBER'];
    
    if(isset($newOrders[$id])){
        $newOrders[$id]['LINE_TOTAL'] += $order['LINE_TOTAL'];
    } else $newOrders[$id] = $order;
}
0
Morgosus 1 sep. 2020 a las 12:33