数组和一些操作

时间:2013-10-12 10:00:08

标签: php arrays sorting

我有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

有什么想法吗?

1 个答案:

答案 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)