Как видите, у меня есть массив с дубликатами
потому что один заказ может иметь несколько 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
Еще один способ, которым вы можете получить 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);
?>
Вот Вы можете видеть это работает!
Один из способов сбора stockitems
в порядок может быть так:
<?php
$result = [];
foreach ($ordersFromQuery as $order) {
$result[$order['orderId']][] = $order;
}
?>