Reputation: 109
I have an array of arrays like this:
array('0'=>
array(
'fromDate' =>2007,
'toDate' => 2008,
'value' => 7)
'1'=>
array(
'fromDate' =>2010,
'toDate' => ,
'value' => 3)
'2'=>
array(
'fromDate' => 2007,
'toDate' => ,
'value' => 4))
I want to count 'value', add them up grouped by 'fromDate' like this:
array('0' =>
array(
'fromDate' => 2007,
'sum' => 2)
'1' =>
array(
'fromDate' => 2010,
'sum' => 1))
Any help is much appreciated!
Upvotes: 0
Views: 945
Reputation: 1799
If you want to count how many arrays with "fromDate" e.g. 2007 you have:
function countByFromDate($array) {
$result = array();
foreach($array as $item) {
$fromDate = $item['fromDate'];
if (!isset($result[$fromDate])) {
$result[$fromDate] = array('fromDate' => $fromDate, 'sum' => 0);
}
$result[$fromDate]['sum']++;
}
return $result;
}
Upvotes: 1
Reputation: 212412
$myData = array('0'=>
array(
'fromDate' =>2007,
'toDate' => 2008,
'value' => 7),
'1'=>
array(
'fromDate' =>2010,
'toDate' => NULL,
'value' => 3),
'2'=>
array(
'fromDate' => 2007,
'toDate' => NULL,
'value' => 4)
);
$counts = array_reduce(
$myData,
function ($counter, $entry) {
if (!isset($counter[$entry['fromDate']])) {
$counter[$entry['fromDate']] = array(
'fromDate' => $entry['fromDate'],
'sum' => 1
);
} else {
$counter[$entry['fromDate']]['sum']++;
}
return $counter;
},
array()
);
var_dump($counts);
Upvotes: 2