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

PHP实现数组两次分组求平均值:先5个一组再12个一组

实现多级分组求平均值的PHP循环方案

嘿,我来帮你搞定这个多级分组求平均的需求!咱们分两步走:先把1440个元素按每5个一组算出sin和cos的平均值,得到288个结果;再把这288个结果按每12个一组二次求平均,最终得到24个结果。

首先要注意的是:你生成的$values数组里的元素是字符串格式(比如('2018-01-23 00:01:00', -0.3746..., -0.9271...)),没法直接做数值计算,所以第一步得先把每个元素里的sin和cos值提取出来转成浮点数。

完整实现代码

<?php
// 假设这是你已经生成的$values数组
// $values = array(...);

// 第一步:解析$values数组,提取出sin和cos的数值
$parsedData = [];
foreach ($values as $item) {
    // 去掉字符串前后的括号
    $cleanItem = trim($item, '()');
    // 按", "分割成三部分(日期、sin值、cos值)
    list($dateStr, $sinStr, $cosStr) = explode(', ', $cleanItem);
    // 将sin和cos字符串转为浮点数,存入新数组
    $parsedData[] = [
        'sin' => (float)$sinStr,
        'cos' => (float)$cosStr
    ];
}

// 第二步:第一级分组:每5个元素一组,计算平均值(得到288个结果)
$firstLevelAverages = [];
$groupSizeFirst = 5;
$totalFirstGroups = count($parsedData) / $groupSizeFirst; // 1440/5=288

for ($i = 0; $i < $totalFirstGroups; $i++) {
    // 计算当前分组的起始和结束索引
    $startIndex = $i * $groupSizeFirst;
    // 从解析后的数据中截取当前分组的5个元素
    $currentGroup = array_slice($parsedData, $startIndex, $groupSizeFirst);
    
    // 初始化当前分组的sin和cos总和
    $sumSin = 0;
    $sumCos = 0;
    foreach ($currentGroup as $data) {
        $sumSin += $data['sin'];
        $sumCos += $data['cos'];
    }
    
    // 计算平均值并加入第一级结果数组
    $firstLevelAverages[] = [
        'avg_sin' => $sumSin / $groupSizeFirst,
        'avg_cos' => $sumCos / $groupSizeFirst
    ];
}

// 第三步:第二级分组:每12个元素一组,计算平均值(得到24个最终结果)
$finalAverages = [];
$groupSizeSecond = 12;
$totalSecondGroups = count($firstLevelAverages) / $groupSizeSecond; // 288/12=24

for ($j = 0; $j < $totalSecondGroups; $j++) {
    // 计算当前分组的起始和结束索引
    $startIndex = $j * $groupSizeSecond;
    // 从第一级结果中截取当前分组的12个元素
    $currentGroup = array_slice($firstLevelAverages, $startIndex, $groupSizeSecond);
    
    // 初始化当前分组的sin和cos总和
    $sumSin = 0;
    $sumCos = 0;
    foreach ($currentGroup as $data) {
        $sumSin += $data['avg_sin'];
        $sumCos += $data['avg_cos'];
    }
    
    // 计算平均值并加入最终结果数组
    $finalAverages[] = [
        'final_avg_sin' => $sumSin / $groupSizeSecond,
        'final_avg_cos' => $sumCos / $groupSizeSecond
    ];
}

// 输出最终结果(可选)
// print_r($finalAverages);
?>

代码说明

  1. 数据解析:遍历原始的$values数组,把每个字符串元素拆解成可计算的浮点数,避免直接操作字符串导致的计算错误。
  2. 第一级分组:使用for循环控制分组,每次从解析后的数据中截取5个元素,累加sin和cos的值后计算平均值。
  3. 第二级分组:和第一级逻辑类似,只是分组大小改为12,基于第一级的平均值数组进行二次计算。

这样运行后,$finalAverages数组就会包含你需要的24个最终平均值结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:56