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

MySQLi fetch数组while循环中变量递增与平均计算错误解决

解决月度平均强度计算的问题

嘿,我明白你遇到的麻烦了!你的思路是对的——要根据实际存在的数据数量来计算平均值,但之前的实现方式有个关键问题:你在逐行处理数据的时候,每次循环只处理一个day_range的记录,然后立刻计算平均值,而且还把$i重置为0了,这就导致$i永远只能是1,因为每次循环只统计了当前这一条数据,而不是该月份所有的有效数据。

更好的解决方案:用数组收集数据

我们可以换个思路,不要用单独的变量(比如$int1_1、$int1_2)来存储每个区间的强度,而是用数组来收集对应月份的所有有效强度值。这样不管有几个区间的数据,我们都能轻松统计总数和计算总和。

修改后的代码大概是这样的:

// 先初始化每个月份的数组,用来存储有效强度值
$monthlyIntensities = [
    1 => [], // 一月
    2 => [], // 二月
    // 这里可以继续添加其他月份...
];

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $month = $row['month'];
    // 只处理我们关心的月份(如果需要的话)
    if (!isset($monthlyIntensities[$month])) {
        continue;
    }
    // 只要当前行有有效强度值,就添加到对应月份的数组里
    // 这里可以根据需要判断day_range是否合法,或者直接收集所有有效数据
    if (!empty($row['intensity'])) {
        $monthlyIntensities[$month][] = $row['intensity'];
    }
}

// 现在计算每个月份的平均值
foreach ($monthlyIntensities as $month => $intensities) {
    $count = count($intensities);
    if ($count === 0) {
        // 如果该月份没有数据,设置默认值或者跳过
        $avgIntensity = 0; // 或者null,根据你的业务需求来
    } else {
        $total = array_sum($intensities);
        $avgIntensity = $total / $count;
    }
    // 这里可以把结果存起来,比如$monthlyAvg[$month] = $avgIntensity;
    echo "月份{$month}的平均强度:{$avgIntensity}\n";
}

为什么这个方法更靠谱?

  • 我们先把所有数据都收集到对应的数组里,而不是边处理边计算,这样能确保统计到该月份的所有有效数据
  • 用count()获取实际的数据数量,避免了固定除以4的错误
  • 代码更简洁,不用为每个月份写重复的判断逻辑,扩展性更好(比如新增月份只需要在初始化数组里加一行)

如果你还是想保留原来的day_range判断

如果你需要严格只收集指定day_range的数据,也可以在添加到数组前做判断:

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $month = $row['month'];
    $dayRange = $row['day_range'];
    $validRanges = ['01-07', '08-14', '15-21', '22-end'];
    
    if (!isset($monthlyIntensities[$month]) || !in_array($dayRange, $validRanges)) {
        continue;
    }
    
    if (!empty($row['intensity'])) {
        $monthlyIntensities[$month][] = $row['intensity'];
    }
}

这样就能确保只收集你指定的四个区间的数据,然后再计算平均值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:36