Объединить многомерный массив в php с повторяющимися значениями

Как видите, у меня есть массив с дубликатами
потому что один заказ может иметь несколько stockitems (stockitemname). Как я могу объединить массив, чтобы итоговое поле суммировалось, ордериды больше не дублировались и все имена элементов хранилища помещались в один и тот же orderId?

У кого-нибудь есть решение, чтобы решить эту проблему?

Array ( [0] => Array
([orderId] => 1544100294
[total] => 215.28
[receivedate] => 0000-00-00
[stockitemname] => "The Gu" red shirt XML tag t-shirt (White) XXS
[customerid] => 10 )
[1] => Array
( [orderId] => 1544119651
[total] => 37.38
[receivedate] => 0000-00-00
[stockitemname] => USB rocket launcher (Gray)
[customerid] => 10 )
[2] => Array
( [orderId] => 1544100294
[total] => 1614.60
[receivedate] => 0000-00-00
[stockitemname] => Large sized bubblewrap roll 50m
[customerid] => 10 ) )

Массив создается из результата этого запроса:

SELECT oc.orderId, SUM(so.quantity*si.RecommendedRetailPrice) total, oc.receivedate, si.stockitemname, ru.customerid
FROM orderbycustomers oc
JOIN registered_users ru
ON oc.customerid = ru.customerid
JOIN stockitemorders so
ON oc.orderId = so.orderId
JOIN stockitems si
ON so.StockItemID = si.StockItemID
WHERE oc.customerid = $customerid
GROUP BY si.stockitemname
ORDER BY oc.receivedate

0

Решение

Еще один способ, которым вы можете получить stockitems с тем же id в unique array,

<?php

$input = Array ( Array
('orderId' => '1544100294',
'total' => 215.28,
'receivedate' => '0000-00-00',
'stockitemname' => 'The Gu red shirt XML tag t-shirt (White) XXS',
'customerid' => 10 ),
Array
( 'orderId' => '1544119651',
'total' => 37.38,
'receivedate' => '0000-00-00',
'stockitemname' => 'USB rocket launcher (Gray)',
'customerid' => 10 ),
Array
( 'orderId' => '1544100294',
'total' => 1614.60,
'receivedate' => '0000-00-00',
'stockitemname' => 'Large sized bubblewrap roll 50m',
'customerid' => 10 ) );

// New array using orderId as the key
$output = array();

foreach ($input as $values) {
// Define your key
$key = $values['orderId'];
// Assign to the new array using all of the actual values
$output[$key][] = $values;
}

// Get all values inside the array, but without orderId in the keys:
$output = array_values($output);

// Print the new array
print_r($output);
?>

Вот Вы можете видеть это работает!

1

Другие решения

Один из способов сбора stockitems в порядок может быть так:

<?php
$result = [];
foreach ($ordersFromQuery as $order) {
$result[$order['orderId']][] = $order;
}
?>
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector