我有一个订单的订单项列表,但是我们收到的Feed将单个订单项的多个数量划分为多个单独的订单项。
如果SKU相同,我需要合并和/或某些元素,并且每个SKU仅返回一个订单项。 我需要为每个项目加税,运费和运费。
[Sku]=> 47069
[QTY]=> 1
[Price]=> 5.9900
[Tax]=> 0.4200
[Shipping]=> 2.5800
[ShippingTax]=> 0.1800
[Sku]=> 241573
[QTY]=> 1
[Price]=> 6.4900
[Tax]=> 0.4700
[Shipping]=> 0.9300
[ShippingTax]=> 0.0700
[Sku]=> 241573
[QTY]=> 1
[Price]=> 6.4900
[Tax]=> 0.4500
[Shipping]=> 0.9200
[ShippingTax]=> 0.0600
[Sku]=> 241573
[QTY]=> 1
[Price]=> 6.4900
[Tax]=> 0.4500
[Shipping]=> 0.9200
[ShippingTax]=> 0.0600
这应该导致
[Sku]=> 47069
[QTY]=> 1
[Price]=> 5.9900
[Tax]=> 0.4200
[Shipping]=> 2.5800
[ShippingTax]=> 0.1800
[Sku]=> 241573
[QTY]=> 3
[Price]=> 6.4900
[Tax]=> 1.3700
[Shipping]=> 2.7800
[ShippingTax]=> 0.1900
答案 0 :(得分:0)
您需要使用foreach
$products[] = array(
'Sku'=> 47069,
'QTY'=> 1,
'Price'=> 5.9900,
'Tax'=> 0.4200,
'Shipping'=> 2.5800,
'ShippingTax'=> 0.1800,
);
$products[] = array(
'Sku'=> 241573,
'QTY'=> 1,
'Price'=> 6.4900,
'Tax'=> 0.4700,
'Shipping'=> 0.9300,
'ShippingTax'=> 0.0700,
);
$products[] = array(
'Sku'=> 241573,
'QTY'=> 1,
'Price'=> 6.4900,
'Tax'=> 0.4500,
'Shipping'=> 0.9200,
'ShippingTax'=> 0.0600,
);
$products[] = array(
'Sku'=> 241573,
'QTY'=> 1,
'Price'=> 6.4900,
'Tax'=> 0.4500,
'Shipping'=> 0.9200,
'ShippingTax'=> 0.0600,
);
$pr = array();
foreach($products as $product)
{
if(isset($pr[$product['Sku']]))
{
$pr[$product['Sku']]['QTY'] += $product['QTY'];
$pr[$product['Sku']]['Tax'] += $product['Tax'];
$pr[$product['Sku']]['Shipping'] += $product['Shipping'];
$pr[$product['Sku']]['ShippingTax'] += $product['ShippingTax'];
}
else
{
$pr[$product['Sku']] = $product;
}
}
输出:
Array
(
[47069] => Array
(
[Sku] => 47069
[QTY] => 1
[Price] => 5.99
[Tax] => 0.42
[Shipping] => 2.58
[ShippingTax] => 0.18
)
[241573] => Array
(
[Sku] => 241573
[QTY] => 3
[Price] => 6.49
[Tax] => 1.37
[Shipping] => 2.77
[ShippingTax] => 0.19
)
)
答案 1 :(得分:0)
您可以将此功能用作起点。
function combine_two_arrs($arr1, $arr2, $k='Sku') {
$arr_final = [];
if ($arr1[$k] == $arr2[$k]){
$arr_final[$k] = $arr1[$k];
} else {
return [$arr1, $arr2];
}
foreach($arr1 as $k1 => $v1) {
foreach($arr2 as $k2 => $v2) {
if(($k1 != $k) && ($k1 == $k2)){
$arr_final[$k1] = $v1 + $v2;
}
}
}
return $arr_final;
}
然后,您可以应用高阶函数(array_reduce可能是一个不错的选择),以将此函数应用于$products
数组。
print_r(combine_two_arrs($products[0], $products[2], 'Sku'));
/*
Array
(
[0] => Array
(
[Sku] => 47069
[QTY] => 1
[Price] => 5.99
[Tax] => 0.42
[Shipping] => 2.58
[ShippingTax] => 0.18
)
[1] => Array
(
[Sku] => 241573
[QTY] => 1
[Price] => 6.49
[Tax] => 0.45
[Shipping] => 0.92
[ShippingTax] => 0.06
)
)
*/
print_r(combine_two_arrs($products[1], $products[2], 'Sku'));
/*
Array
(
[Sku] => 241573
[QTY] => 2
[Price] => 12.98
[Tax] => 0.92
[Shipping] => 1.85
[ShippingTax] => 0.13
)
*/