<?php
$dataItems = collect([
[
'id' => 1,
'serial' => "XXXXXXAA1",
'pd_item_info' =>
[
'id' => 1,
'quantity' => 5,
'ipo_item_pml_info' =>
[
'id' => 1,
'product_name' => 'Keyboard'
]
]
],
[
'id' => 33,
'serial' => "XXXXXXFOO",
'pd_item_info' =>
[
'id' => 33,
'quantity' => 100,
'ipo_item_pml_info' =>
[
'id' => 33,
'product_name' => 'Speaker'
]
]
],
[
'id' => 2,
'serial' => "XXXXXXAA2",
'pd_item_info' =>
[
'id' => 2,
'quantity' => 10,
'ipo_item_pml_info' =>
[
'id' => 2,
'product_name' => 'Keyboard'
]
]
]
]);
var_export(
$dataItems
->groupBy(fn($item) => $item['pd_item_info']['ipo_item_pml_info']['product_name'])
->map(fn($group, $key) => ['product_name' => $key, 'serial' => $group->pluck('serial')->toArray()])
->values()
->toArray()
);