合并 php 中具有重复值的多维数组
Merge multidimensional array in php with duplicate values
如您所见,我有一个包含重复 orderid 的数组
因为一个订单可以有多个 stockitems(stockitemname)。我怎样才能合并数组,以便对总字段求和,orderid 不再重复,所有 stockitemnames 都放在同一个 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
在 order 中收集 stockitems
的一种方法可能是这样的:
<?php
$result = [];
foreach ($ordersFromQuery as $order) {
$result[$order['orderId']][] = $order;
}
?>
在 unique array
.
中获得具有相同 id
的 stockitems
的另一种方法
<?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);
?>
Here 你可以看到它正在运行!
如您所见,我有一个包含重复 orderid 的数组 因为一个订单可以有多个 stockitems(stockitemname)。我怎样才能合并数组,以便对总字段求和,orderid 不再重复,所有 stockitemnames 都放在同一个 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
在 order 中收集 stockitems
的一种方法可能是这样的:
<?php
$result = [];
foreach ($ordersFromQuery as $order) {
$result[$order['orderId']][] = $order;
}
?>
在 unique array
.
id
的 stockitems
的另一种方法
<?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);
?>
Here 你可以看到它正在运行!