How to GROUP BY and SUM PHP Array?
14,429
I have solved it.
public function getDateWiseScore($data) {
$groups = array();
foreach ($data as $item) {
$key = $item['evaluation_category_id'];
if (!array_key_exists($key, $groups)) {
$groups[$key] = array(
'id' => $item['evaluation_category_id'],
'score' => $item['score'],
'itemMaxPoint' => $item['itemMaxPoint'],
);
} else {
$groups[$key]['score'] = $groups[$key]['score'] + $item['score'];
$groups[$key]['itemMaxPoint'] = $groups[$key]['itemMaxPoint'] + $item['itemMaxPoint'];
}
}
return $groups;
}
Related videos on Youtube
Author by
Fawad Ghafoor
Fresh Software Engineer Working in PHP Zend Framework, YII javaScript,jQuery,Ajax. Smarty. mySQL,Doctrine ORM Facebook Apps. Google maps Apps. Twitter Apps
Updated on June 04, 2022Comments
-
Fawad Ghafoor almost 2 years
How to GROUP BY AND SUM this Array by
evaluation_category_id
Array ( [0] => Array ( [id] => 60 [evaluation_category_id] => 3 [score] => 15 [itemMaxPoint] => 20 ) [1] => Array ( [id] => 61 [evaluation_category_id] => 2 [score] => 10 [itemMaxPoint] => 20 ) [2] => Array ( [id] => 62 [evaluation_category_id] => 1 [score] => 5 [itemMaxPoint] => 20 ) [3] => Array ( [id] => 63 [evaluation_category_id] => 1 [score] => 50 [itemMaxPoint] => 200 ) [4] => Array ( [id] => 64 [evaluation_category_id] => 2 [score] => 150 [itemMaxPoint] => 200 ) [5] => Array ( [id] => 65 [evaluation_category_id] => 3 [score] => 30 [itemMaxPoint] => 50 ) . . . )
So that i get array like this
Array ( [0] => Array ( [evaluation_category_id] => 3 [score] => 45 [itemMaxPoint] => 70 ) [1] => Array ( [evaluation_category_id] => 2 [score] => 160 [itemMaxPoint] => 220 ) [2] => Array ( [evaluation_category_id] => 1 [score] => 55 [itemMaxPoint] => 220 ) }
i have tried this but its not working .please correct me where i am doing wrong
public function test($data) { $groups = array(); foreach ($data as $item) { $key = $item['evaluation_category_id']; if (!isset($groups[$key])) { $groups[$key] = array( 'id' => $key, 'score' => $item['score'], 'itemMaxPoint' => $item['itemMaxPoint'], ); } else { $groups[$key]['score'] = $groups[$key]['score'] + $item['score']; $groups[$key]['itemMaxPoint'] = $groups[$key]['itemMaxPoint'] +$item['itemMaxPoint']; } } return $groups; }
the Output is
Array ( [2] => Array ( [id] => 2 [score] => 121 //121 because the given array is different.but its actually SUM all values of score [itemMaxPoint] => 300 ) )
-
John Conde about 11 yearsWhat have you tried? See ask advice, please.
-
Mike B about 11 yearsLoop over it and create a new array
-
Brent Washburne almost 9 yearspossible duplicate of Grouping arrays in PHP
-