You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按国家与性别分组二维数组并计算活跃度得分平均值

解决方案:按国家+性别分组计算活跃度得分平均值

嘿,这个需求很常见,我来给你一个清晰的实现方案,直接用PHP就能搞定!

核心思路

我们需要先按**国家(country)+性别(gender)**的组合对用户进行分组,记录每个分组的总活跃度得分和用户数量,最后用总分除以人数得到平均值。这样既高效又容易理解。

完整代码实现

$users = [
    ['id' => 1, 'gender' => 'M', 'dob' => 1990, 'country' => 'IN', 'activity_score' => 34],
    ['id' => 2, 'gender' => 'M', 'dob' => 1980, 'country' => 'US', 'activity_score' => 9],
    ['id' => 3, 'gender' => 'F', 'dob' => 1993, 'country' => 'UK', 'activity_score' => 45],
    ['id' => 4, 'gender' => 'M', 'dob' => 1998, 'country' => 'IN', 'activity_score' => 0],
    // 可以继续添加更多用户数据
];

// 初始化分组统计数组,存储每个分组的总分、人数、国家和性别
$groupStats = [];

foreach ($users as $user) {
    // 生成唯一分组标识:用下划线拼接国家和性别,确保每个组合唯一
    $groupKey = $user['country'] . '_' . $user['gender'];
    
    // 如果分组不存在,先初始化统计数据
    if (!isset($groupStats[$groupKey])) {
        $groupStats[$groupKey] = [
            'total_score' => 0,
            'count' => 0,
            'country' => $user['country'],
            'gender' => $user['gender']
        ];
    }
    
    // 累加当前用户的活跃度得分和人数
    $groupStats[$groupKey]['total_score'] += $user['activity_score'];
    $groupStats[$groupKey]['count']++;
}

// 计算每个分组的平均值,整理成最终结果
$averageScores = [];
foreach ($groupStats as $stat) {
    // 避免除以0的异常情况(比如某个分组没有用户数据)
    $average = $stat['count'] > 0 ? $stat['total_score'] / $stat['count'] : 0;
    
    $averageScores[] = [
        'country' => $stat['country'],
        'gender' => $stat['gender'],
        'average_activity_score' => round($average, 2) // 保留两位小数,可按需调整精度
    ];
}

// 打印结果,或者根据业务需求进一步处理
print_r($averageScores);

代码解释

  1. 分组统计阶段:

    • 用$groupStats数组追踪每个分组的核心数据:总分、用户数、国家和性别。
    • 用国家_性别作为唯一键,确保每个组合(比如IN-M、US-M)只会被统计一次。
  2. 平均值计算阶段:

    • 遍历统计好的分组数据,用总分除以人数得到平均值。
    • 加入了$stat['count'] > 0的判断,避免出现除以0的报错情况。
    • 用round($average, 2)把结果保留两位小数,让输出更整洁,你可以根据需求改成保留一位或者不保留小数。

额外小技巧

  • 如果觉得字符串拼接的分组键不够直观,也可以用数组作为键(PHP支持数组作为数组键):
    $groupKey = [$user['country'], $user['gender']];
    
  • 如果需要对结果排序(比如按国家名称、性别或者平均值排序),可以用usort函数:
    // 按国家名称升序排序
    usort($averageScores, function($a, $b) {
        return strcmp($a['country'], $b['country']);
    });
    

内容的提问来源于stack exchange,提问作者susana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:59