how can group date and calculate sum of weight then put assoc array php?
{name:"A",date:"2012-12-11",order:1,time:3,weight:10},
{name:"A",date:"2012-12-11",order:1,time:4,weight:12},
{name:"B",date:"2012-12-11",order:1,time:3,weight:17},
{name:"A",date:"2012-12-12",order:1,time:5,weight:50},
{name:"A",date:"2012-12-12",order:2,time:3,weight:70}
According this sum of weight day by day but problem is if(same date same order same name ; which one greater time take its weight, dont care less) but different name or order take sum of group.
Result must be like:
{date:2012-12-11,weight:29},
{date:2012-12-12,weight:120},
Anyone Help ? it can be like:
{name:"A",date:"2012-12-11",order:1,time:3,weight:10},
{name:"B",date:"2012-12-11",order:1,time:3,weight:17},
{name:"A",date:"2012-12-11",order:1,time:4,weight:12},
{name:"A",date:"2012-12-12",order:1,time:5,weight:50},
{name:"A",date:"2012-12-12",order:2,time:3,weight:70}
i am sure there is a much simpler solution to this, but i think this will suffice:
$json = '[';
$json .= '{"name":"A","date":"2012-12-11","order":1,"time":3,"weight":10},';
$json .= '{"name":"A","date":"2012-12-11","order":1,"time":4,"weight":12},';
$json .= '{"name":"B","date":"2012-12-11","order":1,"time":3,"weight":17},';
$json .= '{"name":"A","date":"2012-12-12","order":1,"time":5,"weight":50},';
$json .= '{"name":"A","date":"2012-12-12","order":2,"time":3,"weight":70}]';
$orders = json_decode($json, true);
$result = array();
foreach ($orders as $row) {
$key = $row['date'].'.'.$row['order'].'.'.$row['time'];
$result[$key]['date'] = $row['date'];
if (isset($result[$key]['weight'])) {
if ($row['weight'] > $result[$key]['weight']) {
$result[$key]['weight'] = $row['weight'];
}
} else {
$result[$key]['weight'] = $row['weight'];
}
}
$realresult = array();
foreach ($result as $row) {
$realresult[$row['date']]['date'] = $row['date'];
if (isset($realresult[$row['date']]['weight'])) {
$realresult[$row['date']]['weight'] += $row['weight'];
} else {
$realresult[$row['date']]['weight'] = $row['weight'];
}
}
print_r($realresult);
//Array ( [2012-12-11] => Array ( [date] => 2012-12-11 [weight] => 29 ) [2012-12-12] => Array ( [date] => 2012-12-12 [weight] => 120 ) )
you can try it out here: http://codepad.viper-7.com/lSEhBC