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;
}
Share:
14,429

Related videos on Youtube

Fawad Ghafoor
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, 2022

Comments

  • Fawad Ghafoor
    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
        )
    
    )