一个数组计算问题

$userlist = [                
                ['name'=>'zhang','money'=>10, 'level'=>1],
                ['name'=>'wang', 'money'=>20, 'level'=>2],
                ['name'=>'li',   'money'=>10, 'level'=>3],
                ['name'=>'zhao', 'money'=>30, 'level'=>3],
                ['name'=>'wu',   'money'=>20, 'level'=>5]
            ];

怎么按level分组统计出,money的值,顺序输出来。

level相同的,money累加起来。例如level=3的,money=10+30=40,userlist数组长度未知。

阅读 1.5k
3 个回答
    $level = [];
    
    foreach ($userlist as $value) {
        $level[$value['level']] += $value['money'];
    }
    
    var_dump ($level);

结果

array(4) {
  [1] =>
  int(10)
  [2] =>
  int(20)
  [3] =>
  int(40)
  [5] =>
  int(20)
}
$userlist = [                
                ['name'=>'zhang','money'=>10, 'level'=>1],
                ['name'=>'wang', 'money'=>20, 'level'=>2],
                ['name'=>'li',   'money'=>10, 'level'=>3],
                ['name'=>'zhao', 'money'=>30, 'level'=>3],
                ['name'=>'wu',   'money'=>20, 'level'=>5]
            ];


function groupby($array, $groupby_key, $sum_key){
    $res = array();
    foreach($array as $data) {
        if(!array_key_exists($data[$groupby_key], $res))
            $res[ $data[$groupby_key] ] = 0;
        $res[ $data[$groupby_key] ] += $data[$sum_key];
    }
    return $res;
}


$res = groupby($userlist, 'level', 'money');
var_dump($res);

将会输出

array(4) {   
  [1]=>      
  int(10)    
  [2]=>      
  int(20)    
  [3]=>      
  int(40)    
  [5]=>      
  int(20)    
}            

这种问题不用考虑那么多吧, 用个foreach就好了如: @CrazyCodes 的就好.
或者考虑用array_reduce.

$result = array_reduce($userlist, function($res, $item){
        $res[$item['level']] += $item['money'];
        return $res;
}, []);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题