>我有以下值的数组
Array
(
[0] => Array
(
[order_date] => 2016-01-01
[sku] => RK101
[qty] => 2
)
[1] => Array
(
[order_date] => 2016-01-01
[sku] => RK101
[qty] => 5
)
[2] => Array
(
[order_date] => 2016-01-01
[sku] => RK102
[qty] => 4
)
[3] => Array
(
[order_date] => 2016-01-02
[sku] => RK101
[qty] => 2
)
[4] => Array
(
[order_date] => 2016-01-02
[sku] => RK101
[qty] => 2
)
)
我想对数组求和,首先按日期,然后按 SKU,我想要如下结果
Array
(
[2016-01-01] => Array
(
[RK101] => Array
(
[qty] => 7
)
[RK102] => Array
(
[qty] => 4
)
)
[2016-01-01] => Array
(
[RK101] => Array
(
[qty] => 4
)
)
)
我已经探索了堆栈溢出,并发现许多基于一个键计算总和的帖子,在这种情况下,我想首先根据日期对数组值求和,然后按 SKU。请帮助相同
请尝试以下解决方案:
<?php
echo '<pre>';
$array = Array
(
'0' => Array
(
'order_date' => '2016-01-01',
'sku' => 'RK101',
'qty' => 2
),
'1' => Array
(
'order_date' => '2016-01-01',
'sku' => 'RK101',
'qty' => 5
),
'2' => Array
(
'order_date' => '2016-01-01',
'sku' => 'RK102',
'qty' => 4
),
'3' => Array
(
'order_date' => '2016-01-02',
'sku' => 'RK101',
'qty' => 2
),
'4' => Array
(
'order_date' => '2016-01-02',
'sku' => 'RK101',
'qty' => 2
)
);
$new_array = array();
foreach ($array as $a) {
if (!isset($new_array[$a['order_date']][$a['sku']]['qty'])) {
$new_array[$a['order_date']][$a['sku']]['qty'] = 0;
}
$new_array[$a['order_date']][$a['sku']]['qty'] += $a['qty'];
}
print_r($new_array);
输出:
Array
(
[2016-01-01] => Array
(
[RK101] => Array
(
[qty] => 7
)
[RK102] => Array
(
[qty] => 4
)
)
[2016-01-02] => Array
(
[RK101] => Array
(
[qty] => 4
)
)
)
这是另一种解决方案,它为您提供的输出略有不同,可能是首选,也可能不是首选。
$results = array();
$myNums = array(
array(
'order_date' => '2016-01-01',
'sku' => 'RK101',
'qty' => 2,
),
array(
'order_date' => '2016-01-01',
'sku' => 'RK101',
'qty' => 1,
),
array(
'order_date' => '2016-01-02',
'sku' => 'RK101',
'qty' => 2,
),
);
foreach ($myNums as $num) {
$key = "{$num['order_date']}|{$num['sku']}";
if (! array_key_exists($key, $results)) {
$results[$key] = 0;
}
$results[$key] += $num['qty'];
}
var_dump($results);
/*
var_dump gives the following...
Array
(
[2016-01-01|RK101] => 3,
[2016-01-02|RK101] => 2,
)*/