PHP按用户分组统计数组字段求和问题求助
按用户单独统计字段总和的解决方案
嘿,我看你遇到的问题是没法按用户单独统计通话相关字段的总和,反而得到了所有用户的总计对吧?这是因为你当前的代码把所有用户的数值都累加到了同一个全局变量里,没有按用户做分组区分~
问题分析
你原来的代码里,$usercalls、$usertalk这些都是单个数值变量,每次循环都会把当前用户的数值加到这些变量里,最终自然会变成所有用户的总和,而不是每个用户的单独统计结果。
修正后的代码实现
我们需要用一个二维数组来存储每个用户的统计数据,把用户名作为数组的键,每个键下面再存放对应字段的累加值:
// 初始化一个空数组,用来存储每个用户的统计结果 $user_stats = []; foreach ($queryusers2 as $user) { $current_user = $user['user']; // 如果当前用户还没在统计数组中,先初始化他的所有字段为0 if (!isset($user_stats[$current_user])) { $user_stats[$current_user] = [ 'calls' => 0, 'talk' => 0, 'pause' => 0, 'wait' => 0, 'dispo' => 0, 'dead' => 0 ]; } // 对当前用户的各个字段进行累加 $user_stats[$current_user]['calls'] += $user['calls']; $user_stats[$current_user]['talk'] += $user['talk']; $user_stats[$current_user]['pause'] += $user['pause']; $user_stats[$current_user]['wait'] += $user['wait']; $user_stats[$current_user]['dispo'] += $user['dispo']; $user_stats[$current_user]['dead'] += $user['dead']; } // 示例:遍历输出每个用户的统计结果 foreach ($user_stats as $username => $stats) { echo "用户 {$username} 的统计数据:\n"; echo "通话数:{$stats['calls']}\n"; echo "通话时长:{$stats['talk']}\n"; echo "暂停时长:{$stats['pause']}\n"; echo "等待时长:{$stats['wait']}\n"; echo "处置数:{$stats['dispo']}\n"; echo "无效数:{$stats['dead']}\n"; }
代码逻辑说明
- 首先创建
$user_stats数组,用来按用户分组存储统计数据。 - 循环遍历查询结果时,先判断当前用户是否已在
$user_stats中:- 如果不存在,就初始化该用户的所有统计字段为0,避免后续累加时出现未定义索引的错误。
- 如果已存在,就直接把当前记录的字段值累加到对应位置。
- 循环结束后,
$user_stats数组里就会包含每个用户单独的统计总和,你可以根据需求遍历输出或进一步处理。
这个方法不管你的查询结果里同一个用户是单条记录还是多条记录,都能正确完成累加统计~
内容的提问来源于stack exchange,提问作者It0007
相关产品推荐
相关产品推荐

