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

PHP动态数组统计相同status值并重构数组的实现问询

解决动态数组的状态统计与格式重构问题

嘿,我来帮你搞定这个统计需求!你的现有代码已经有了统计的雏形,但有点不够灵活,而且还没完成最后格式转换的步骤。我给你两种方案,一种是基于你现有代码的快速改进,另一种是更通用的灵活方案。

方案一:基于你现有代码的快速改进

你已经手动统计了三种状态的数量,只需要在最后把这些统计值转换成你想要的数组格式就行:

public function getData(){
    $key_idle = 0;
    $key_busy = 0;
    $key_overload = 0;
    $data = $this->queries_trend->getDataCustomer();
    
    foreach ($data as $key => $value) {
        $val = $value['status'];
        if ($val == 'Idle') {
            $key_idle++;
        } elseif ($val == 'Busy') {
            $key_busy++;
        } elseif ($val == 'Overload') {
            $key_overload++;
        }
    }
    
    // 组装成目标格式的数组
    $result = [];
    if ($key_overload > 0) {
        $result[] = ['Overload' => (string)$key_overload];
    }
    if ($key_idle > 0) {
        $result[] = ['Idle' => (string)$key_idle];
    }
    if ($key_busy > 0) {
        $result[] = ['Busy' => (string)$key_busy];
    }
    
    return $result;
}

这个方案适合你确定只有这三种状态的场景,但如果以后新增了其他状态(比如"Offline"),你就得手动加变量和判断,不够灵活。

方案二:更灵活的动态统计方案

这种方法不用硬编码任何状态值,不管后续新增多少种status,代码都能自动统计,通用性更强:

public function getData(){
    // 用一个数组来动态存储每个状态的计数
    $statusCounts = [];
    $data = $this->queries_trend->getDataCustomer();
    
    foreach ($data as $item) {
        $status = $item['status'];
        // 如果该状态还没被统计过,初始化为0
        if (!isset($statusCounts[$status])) {
            $statusCounts[$status] = 0;
        }
        // 计数加1
        $statusCounts[$status]++;
    }
    
    // 把统计结果转换成你需要的格式:每个状态是单独的数组元素
    $result = [];
    foreach ($statusCounts as $status => $count) {
        // 这里如果不需要字符串类型的计数,去掉(string)即可
        $result[] = [$status => (string)$count];
    }
    
    return $result;
}

为什么推荐这个方案?

  • 灵活性高:新增任何status都不需要修改代码,自动适配
  • 代码更简洁:不用维护一堆单独的计数变量
  • 可扩展性强:后续如果需要扩展统计逻辑,只需要修改循环内的逻辑即可

测试一下的话,用你给出的示例数据,这个方法会生成完全符合你要求的数组:[{"Overload":"2"},{"Idle":"1"},{"Busy":"1"}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:46:09