Группировка одинаковых значений в массиве и добавление

#php #arrays

#php #массивы

Вопрос:

У меня есть следующее в массиве $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
        )
 )
  

Я хочу сгруппировать их по порядковому номеру и сложить итоговые значения строк вместе, чтобы конечный массив выглядел следующим образом. Язык — 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
        )
 )
  

Если бы кто-нибудь мог помочь, это было бы здорово, я попробовал несколько разных вещей, но я не получаю требуемого результата.

Приветствия,

Ответ №1:

Это будет перебирать заказы и помещать их в ассоциативные индексы на основе вашего ORDER_NUMBER. Если одно из них уже существует, оно добавит к нему новую 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;
}