这是我的阵列:
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 )
这与我正在寻找的非常不同,仍然让我头晕目眩。 有什么可能的方法??
答案 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;
}
}