Сложение суммы массива с разделением

Есть массивы заказов по городам:

    (
        [0] => stdClass Object
            (
                [order_price] => 1050
                [order_date] => 2022-02-03 07:27:37
                [order_status] => 2
                [order_room] => г. Ивантеевка
                [event_id] => 2905
                [event_date] => 2022-02-05 12:00:00
                [event_places] => a:1:{i:0;a:5:{s:1:"p";s:4:"1000";s:1:"t";s:12:"Партер";s:1:"i";s:5:"16:14";s:1:"r";s:2:"15";s:1:"n";s:2:"14";}}
            )
     
        [1] => stdClass Object
            (
                [order_price] => 3150
                [order_date] => 2022-02-03 12:34:40
                [order_status] => 2
                [order_room] => г. Ивантеевка
                [event_id] => 2905
                [event_date] => 2022-02-05 12:00:00
                [event_places] => a:2:{i:0;a:5:{s:1:"p";s:4:"1500";s:1:"t";s:12:"Партер";s:1:"i";s:4:"1:23";s:1:"r";s:1:"1";s:1:"n";s:2:"22";}i:1;a:5:{s:1:"p";s:4:"1500";s:1:"t";s:12:"Партер";s:1:"i";s:4:"1:24";s:1:"r";s:1:"1";s:1:"n";s:2:"23";}}
            )

В [event_places] хранятся сериализованные данные заказа, такие как сектор, место, ряд и стоимость места. $order_event = unserialize($order_event->event_places);

получаем:

Array
(
    [0] => Array
        (
            [p] => 1500
            [t] => Партер
            [i] => 2:11
            [r] => 2
            [n] => 10
        )
 
    [1] => Array
        (
            [p] => 1500
            [t] => Партер
            [i] => 2:10
            [r] => 2
            [n] => 9
        )
 
)

и т.д. по каждому заказу.

Нужно сложить количество мест и сумму мест. Чтобы получилось примерно так:

Array
                (
                    [0] => 16 по 1500 руб. всего 24000 руб.
                    [1] => 10 по 1300 руб. всего 13000 руб.
                    [3] => 0 по 1000 руб. всего 0 руб.
                    [4] => 9 по 800 руб. всего 7200 руб.
                )

по каждому городу


Ответы (1 шт):

Автор решения: Slava Rozhnev

Проблема может быть решена обычным циклом foreach:

foreach($data as $d) {
    if (!isset($res[$d->order_room])) $res[$d->order_room] = [];
    
    $places = unserialize($d->event_places);
    
    foreach ($places as $p) {
        if (!isset($res[$d->order_room][$p['p']])) $res[$d->order_room][$p['p']] = 1;
        else $res[$d->order_room][$p['p']]++;
    }
}

print_r($res);

PHP foreach online

→ Ссылка