Обработка многомерного массива. С созданием множества массивов

Сейчас у меня есть не полная версия обработки массива. Изначальный массив:

 "datasetTransactionsOrders": [
    {
        "seriesname": "Автоклуб",
        "value": "2"
    },
    {
        "seriesname": "Скидка 10%",
        "value": "1"
    },
    {
        "seriesname": "Скидка 10%",
        "value": "17"
    }
]

Мне нужно преобразовать его следующим образом.

 "datasetTransactionsOrders": [
    {
        "seriesname": "Автоклуб",
        "data": [
            {
              value: "2"
            }
        ]
    },
    {
        "seriesname": "Скидка 10%",
        "data": [
            {
              value: "1"
            },                
            {
              value: "17"
            }
        ]
    }
]

Т.е сформировать для элементов многомерного массива, у которых повторяется seriesname массивы заданных значений. Сейчас у меня есть кусок кода, который складывает данные значения

        $data = [];

        for($i = 0, $size = count($datasetTransactionsOrders); $i < $size; ++$i){
            if (array_key_exists($datasetTransactionsOrders[$i]['seriesname'], $data)) {
                $data[$datasetTransactionsOrders[$i]['seriesname']] += $datasetTransactionsOrders[$i]['value'];
            }
            else {
                $data[$datasetTransactionsOrders[$i]['seriesname']] = $datasetTransactionsOrders[$i]['value'];
            }
        }

        $result = [];

        foreach ($data as $seriesname => $value) {
            array_push($result, [
                'seriesname' => $seriesname,
                'data' => $value,
            ]);
        }
        return array ('datasetTransactionsOrders'=>$result); 

Результат следующий

"datasetTransactionsOrders": [
       {
           "seriesname": "Автоклуб",
           "data": "2"
       },
       {
           "seriesname": "Скидка 10%",
           "data": 18
       }
   ]


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

Автор решения: teran

возьмите уникальные значения series_name

$sn = array_unique(array_column($data, 'seriesname'));

Создайте массив, такой чтобы эти значения стали ключами, сделав заготовку для data

$result = array_fill_keys($sn, ['data' => []]);

Теперь проходите по массиву и раскладывайте значения, куда надо.

foreach($data as $d){
    $r = &$result[ $d['seriesname'] ];
    $r['seriesname'] = $d['seriesname'];
    $r['data'][] = [ 'value' => $d['value'] ];
}

потом ключи скините с помощью array_values()

→ Ссылка
Автор решения: wnull

Ну.. или прямо через foreach:

$new = [];

foreach ($array['datasetTransactionsOrders'] as $key => &$value)
{
    $new[$value['seriesname']]['seriesname'] = $value['seriesname'];
    $new[$value['seriesname']]['data'][$key]['value'] = $value['value'];
}

$new = array_values($new);
print_r($new);

https://3v4l.org/05d8Q

→ Ссылка