[110] => Array
(
[order_id] => 3618
[firstname] => тест
[lastname] => тест
[telephone] => 222222222
[product_id] => 32344
[quantity] => 1
[sku] => 62a194e0c4f39f7026518532
)
[111] => Array
(
[order_id] => 3618
[firstname] => тест
[lastname] => тест
[telephone] => 222222222
[product_id] => 32342
[quantity] => 1
[sku] => 62a194ddc4f39f70265184d4
)
[111] => Array
(
[order_id] => 3618
[firstname] => тест
[lastname] => тест
[telephone] => 222222222
[products] => array (
[0] => array (
[product_id] => 32344
[sku] => 62a194e0c4f39f7026518532
[quantity] => 1
)
[1] => array (
[product_id] => 32342
[sku] => 62a194ddc4f39f70265184d4
[quantity] => 1
)
)
)
$extract = fn($keys, $item) => array_combine($keys, array_map(fn($k) => $item[$k], $keys));
$grouped = [];
$productKeys = [ 'product_id', 'sku', 'quantity' ];
$orderKeys = array_diff(array_keys($arr[0] ?? []), $productKeys);
foreach ($arr as $n) {
$id = $n['order_id'];
$grouped[$id] ??= $extract($orderKeys, $n);
$grouped[$id]['products'][] = $extract($productKeys, $n);
}
$rows = /* тут выполняется запрос для получения данных */;
$out_data = []; // массив выходных данных
foreach($rows as $row)
{
$order = &$out_data[$row['order_id']]; // ссылка на элемент массива заказа
$order['order_id'] = $row['order_id'];
$order['firstname'] = $row['firstname'];
$order['lastname'] = $row['lastname'];
$order['telephone'] = $row['telephone'];
if(!isset($order['products'])) $order['products'] = []; // этот if нужен, если обязательно наличие ключа products с пустым массивом, если в выборке возможны пустые реквизиты продукта.
if(!is_null($row['product_id']))
{
$product = &$order['products'][$row['product_id']]; // делаем ссылку на элемент массива products с уникальным ключом product_id
$product['product_id'] = $row['product_id'];
$product['sku'] = $row['sku'];
$product['quantity'] = $row['quantity'];
// ... таким же способом можно делать более глубокие ссылки в product, если в этом элементе понадобится массив данных
unset($product); // уничтожайте ссылку в конце цикла, иначе не сможете переиспользовать переменную $product за циклом.
}
unset($order);
}