PHP Array Group由一个字段和Sumed两个字段组成

时间:2013-01-04 02:30:51

标签: php arrays multidimensional-array

这是我的阵列:

Array ( 
[0] => Array ( [date] => 28-10-2012 [total] => 100 [earn] => 10 ) 
[1] => Array ( [date] => 28-12-2012 [total] => 100 [earn] => 10 ) 
[2] => Array ( [date] => 28-12-2012 [total] => 90 [earn] => 9 ) 
[3] => Array ( [date] => 28-12-2012 [total] => 315.35 [earn] => 31.535 ) 
[4] => Array ( [date] => 02-01-2013 [total] => 1500 [earn] => 150 ) 
[5] => Array ( [date] => 02-01-2013 [total] => 1000 [earn] => 100 ) 
)

欲望输出:

Array ( 
 [0] => Array ( [date] => 28-10-2012 [total] => 100 [earn] => 10 ) 
 [1] => Array ( [date] => 28-12-2012 [total] => 505.35 [earn] => 505.535 ) 
 [2] => Array ( [date] => 02-01-2013 [total] => 2500 [earn] => 250 )  
)

我到目前为止尝试的方法设法按日期分组,并且只汇总一个具有两个不同数组的字段。

Array ( [28-10-2012] => 100 [28-12-2012] => 505.535 [02-01-2013] => 2500)

Array ( [28-10-2012] => 10 [28-12-2012] => 50.535 [02-01-2013] => 250 )

这与我正在寻找的非常不同,仍然让我头晕目眩。 有什么可能的方法??

2 个答案:

答案 0 :(得分:2)

我认为没有内置函数,你必须自己编写算法。像这样:

$result = array();
foreach ($array as $row)
{
  $result[$row['date']]['date'] = $row['date'];
  $result[$row['date']]['total'] += $row['total'];
  $result[$row['date']]['earn'] += $row['earn'];
}
$result = array_values($result);

答案 1 :(得分:0)

这是总结数组中字段的一种方法。

它与前一个答案基本相同,但您应检查密钥是否存在,因为您将在每个唯一日期的第一次访问时获得“未定义的索引”。希望这会有所帮助。

        // your example input array
        $arr = array(
            array( 'date'=>'28-10-2012', 'total'=>100, 'earn'=>10 ),
            array( 'date'=>'28-10-2012', 'total'=>100, 'earn'=>12 ),
            array( 'date'=>'28-11-2012', 'total'=>120, 'earn'=>12 ),

        );

        $newData = array();
        foreach($arr as $row) {
            if(array_key_exists( $row['date'], $newData)) {
                $newData[$row['date']]['total'] += $row['total'];
                $newData[$row['date']]['earn'] += $row['earn'];         
            } else {
                $newData[$row['date']] = $row;
            }
        }