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

如何在PHP中对数组值分组计数并生成Highcharts所需数据?

高效处理伙伴EDR状态统计,生成Highcharts所需数组

核心思路

一次性遍历原始数组完成状态计数,再按固定伙伴顺序生成目标数组,避免多次遍历提升效率,同时严格保证结果数组的伙伴顺序与需求一致。

实现步骤

  • 先明确23个伙伴的固定顺序列表(比如业务要求排序的伙伴ID/名称数组)
  • 遍历一次原始数据,用关联数组存储每个伙伴的三种状态计数
  • 按固定顺序遍历伙伴列表,从统计结果中取出对应状态的数量(无数据则补0),生成三个目标数组

代码示例

// 替换为你实际的23个伙伴固定顺序列表(用伙伴ID或名称均可)
$partner_order = ['partner_01', 'partner_02', 'partner_03', ..., 'partner_23'];

// 初始化统计容器,确保每个伙伴的三种状态初始计数为0
$status_counter = [];
foreach ($partner_order as $partner) {
    $status_counter[$partner] = [
        'ACHIEVED' => 0,
        'ONGOING' => 0,
        'NOTACHIEVED' => 0
    ];
}

// 遍历原始数组一次,完成所有状态计数
foreach ($partners_edr_data as $record) {
    $current_partner = $record['partner_id']; // 替换为实际的伙伴标识字段名
    $current_status = $record['edr_status'];
    
    // 仅处理在固定列表内的伙伴和合法状态
    if (isset($status_counter[$current_partner]) && in_array($current_status, ['ACHIEVED', 'ONGOING', 'NOTACHIEVED'])) {
        $status_counter[$current_partner][$current_status]++;
    }
}

// 生成Highcharts所需的三个数组
$achieved_list = [];
$ongoing_list = [];
$not_achieved_list = [];

foreach ($partner_order as $partner) {
    $achieved_list[] = $status_counter[$partner]['ACHIEVED'];
    $ongoing_list[] = $status_counter[$partner]['ONGOING'];
    $not_achieved_list[] = $status_counter[$partner]['NOTACHIEVED'];
}

// 此时三个数组已按固定伙伴顺序排列,可直接传入Highcharts配置

关键说明

  • 仅遍历原始数据一次,相比多次遍历的方式效率提升明显,数据量越大优势越突出
  • 初始化阶段给所有伙伴的状态设为0,避免出现未统计到的伙伴在结果数组中缺失值的问题
  • 完全依赖$partner_order的顺序生成结果,确保与Highcharts的X轴伙伴顺序严格匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:57:11