我有db数据,如:
date, storage, bandwidth, cost
我可以输入以下内容:
2013-10-24, 1, 0, 0.55;
2013-10-25, 1, 0, 0.50;
2013-10-25, 1, 0, 0.25;
2013-10-25, 0, 1, 0.50;
我从db获取数据并制作一个foreach。我当然会得到4行。我需要对这样的数据进行分组:
这意味着在2013-10-24我的存储成本为0.55 在2013-10-25,我的存储成本为0.75,带宽成本为0.50
我做了一个功能:
public function sortCostByDay($array, $key) { $return = array(); foreach($array as $v) { $storage = $bandwidth = $total = 0; if($v['storage'] == 1) { $storage += $v['cost']; $total += $storage; } if($v['bandwidth'] == 1) { $bandwidth += $v['cost']; $total += $bandwidth; } $return[$v[$key]][] = array('storage' => $storage, 'bandwidth' => $bandwidth, 'total' => $total); } return $return; }
这将按$ key对我的初始数组进行分组。 $ key是日期。
所以我最终得到了这个:
'2013-10-24' =>
array (size=1)
0 =>
array (size=3)
'storage' => 0.55
'bandwidth' => 0
'total' => 0.55
'2013-10-25' =>
array (size=3)
0 =>
array (size=3)
'storage' => 0.50
'bandwidth' => 0
'total' => 0.50
1 =>
array (size=3)
'storage' => 0.25
'bandwidth' => 0
'total' => 0.50
2 =>
array (size=3)
'storage' => 0
'bandwidth' => 0.50
'total' => 1
我无法弄清楚如何使它成为:
'2013-10-24' =>
array (size=1)
0 =>
array (size=1)
'storage' => 0.55
'bandwidth' => 0
'total' => 0.55
'2013-10-25' =>
array (size=1)
0 =>
array (size=3)
'storage' => 0.75
'bandwidth' => 0.50
'total' => 1.25
有什么想法吗?
答案 0 :(得分:3)
您可以从已分组的mySQL中获取数据。假设您使用mySQL数据库,并且您的日期和成本字段称为day_date和day_cost:
SELECT day_date, SUM(day_cost) as storage FROM your_table GROUP BY day_date
它会产生一个数组:
0 =>
array (size=1)
'day_date' => '2013-10-24'
'storage' => 0.55
我会优化您的数据表,只保存日期和存储和带宽的成本,而不是标志和一个成本字段。现在你有4个字段,在我的情况下你只有3个字段:
day_date (date), storage (float), bandwidth (float)