Hướng dẫn php group by and sum - nhóm php theo và tổng hợp

Cách nhóm theo và tổng hợp mảng này bằng 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
    )
    .
    .
    .
 )

Để tôi nhận được mảng như thế này

 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
   )
} 

Tôi đã thử điều này nhưng nó không hoạt động. Xin vui lòng sửa tôi ở đâu tôi đang làm sai

 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;
}

đầu ra là

Array
(
 [2] => Array
    (
        [id] => 2
        [score] => 121 //121 because the given array is different.but its actually SUM all values of score
        [itemMaxPoint] => 300
    )

)

Nói chung, chức năng nhóm theo mệnh đề và sum () được sử dụng trong cơ sở dữ liệu để sắp xếp các bản ghi.Nhóm theo bản ghi nhóm tuyên bố theo cùng các giá trị và trả về các bản ghi được lọc.SUM () là một hàm tổng hợp được sử dụng bởi nhóm theo câu lệnh.Nhóm và các hoạt động SUM có thể được tích hợp vào danh sách dữ liệu ở cấp mã trong PHP.

Sử dụng hàm pHP mảng_Reduce () để nhóm theo và tổng các giá trị của một mảng trong PHP.Trong ví dụ này, chúng tôi sẽ chỉ cho bạn cách nhóm mảng theo giá trị khóa và tổng bằng PHP.Nó giúp tổng hợp các giá trị của một mảng có cùng các khóa trong PHP.PHP array_reduce() function to GROUP BY and SUM values of an array in PHP. In this example, we will show you how to group array by key and sum values using PHP. It helps to sum the values of an array with the same keys in PHP.

Trong đoạn mã sau, chúng tôi sẽ nhóm mảng theo giá trị category_id và tổng score với PHP.

$array = array( 
  array(
    
'id' => 1,
    
'category_id' => 5,
    
'score' => 321
  
),
  array(
    
'id' => 2,
    
'category_id' => 2,
    
'score' => 123
  
),
  array(
    
'id' => 3,
    
'category_id' => 5,
    
'score' => 567
  
),
  array(
    
'id' => 4,
    
'category_id' => 2,
    
'score' => 878
  
),
  array(
    
'id' => 5,
    
'category_id' => 5,
    
'score' => 621
  
)
);
$result array_reduce($array, function($carry$item){
    if(!isset(
$carry[$item['category_id']])){
        
$carry[$item['category_id']] = ['category_id'=>$item['category_id'],'score'=>$item['score']];
    } else {
        
$carry[$item['category_id']]['score'] += $item['score'];
    }
    return 
$carry;
});

Mảng sau đây sẽ trở lại sau nhóm theo và các hoạt động tổng.

Array
(
    [5] => Array
        (
            [category_id] => 5
            [score] => 1509
        )

    [2] => Array
        (
            [category_id] => 2
            [score] => 1001
        )

)