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

PHP关联数组每10元素分组求平均值的替代实现方法咨询

问题:PHP中对关联数组元素按每10个分组计算平均值的优化方法

我是编程新手,目前需要对关联数组中的元素按每10个为一组,分别求和后计算平均值。我已尝试以下PHP实现方式,但想了解是否存在其他更简洁或高效的实现方法?

我尝试的代码:

<?php
    $arr = array(
      "text"=>"1,1,1,1,1,1,3,4,4,4,2,2,4,3,5,5,5,5,5,5,5,5,2,4,3,3,2,3,3,3,4,3,3,3,3,3,3,3,3,4,1,4,1,1,4,2,2,2,2,3"
      );
      
      foreach( $arr as $question=>$answer ) {
        $ext = ((Integer)$answer[0]+(Integer)$answer[2]+(Integer)$answer[4]+(Integer)$answer[6]+(Integer)$answer[8]+(Integer)$answer[10]+(Integer)$answer[12]+(Integer)$answer[14]+(Integer)$answer[16]+(Integer)$answer[18])/10.0;
        $est = ((Integer)$answer[20]+(Integer)$answer[22]+(Integer)$answer[24]+(Integer)$answer[26]+(Integer)$answer[28]+(Integer)$answer[30]+(Integer)$answer[32]+(Integer)$answer[34]+(Integer)$answer[36]+(Integer)$answer[38])/10.0;
        $agr = ((Integer)$answer[40]+(Integer)$answer[42]+(Integer)$answer[44]+(Integer)$answer[46]+(Integer)$answer[48]+(Integer)$answer[50]+(Integer)$answer[52]+(Integer)$answer[54]+(Integer)$answer[56]+(Integer)$answer[58])/10.0;
        $csn = ((Integer)$answer[60]+(Integer)$answer[62]+(Integer)$answer[64]+(Integer)$answer[66]+(Integer)$answer[68]+(Integer)$answer[70]+(Integer)$answer[72]+(Integer)$answer[74]+(Integer)$answer[76]+(Integer)$answer[78])/10.0;
        $opn = ((Integer)$answer[80]+(Integer)$answer[82]+(Integer)$answer[84]+(Integer)$answer[86]+(Integer)$answer[88]+(Integer)$answer[90]+(Integer)$answer[92]+(Integer)$answer[94]+(Integer)$answer[96]+(Integer)$answer[98])/10.0;
        
        echo($ext);
        echo("\n");
        echo($est);
        echo("\n");
        echo($agr);
        echo("\n");
        echo($csn);
        echo("\n");
        echo($opn);
      }
?>

计算逻辑:

  • $ext:计算索引0-9对应元素的平均值
  • $est:计算索引10-19对应元素的平均值
  • $agr:计算索引20-29对应元素的平均值
  • $csn:计算索引30-39对应元素的平均值
  • $opn:计算索引40-49对应元素的平均值

当前输出结果:

2.1
4.1
3.3
3.2
2.2

优化实现方案

原代码直接通过字符串索引取值,依赖固定的逗号位置,不仅冗余易出错,维护性也差。下面是更简洁高效的实现:

优化代码:

<?php
$arr = [
    "text" => "1,1,1,1,1,1,3,4,4,4,2,2,4,3,5,5,5,5,5,5,5,5,2,4,3,3,2,3,3,3,4,3,3,3,3,3,3,3,3,4,1,4,1,1,4,2,2,2,2,3"
];

foreach ($arr as $answer) {
    // 把逗号分隔的字符串转成整数数组
    $numbers = array_map('intval', explode(',', $answer));
    // 按每10个元素自动分组
    $groups = array_chunk($numbers, 10);
    // 分组名称对应顺序
    $groupNames = ['ext', 'est', 'agr', 'csn', 'opn'];
    
    // 遍历分组计算平均值并输出
    foreach ($groups as $idx => $group) {
        $average = array_sum($group) / 10.0;
        echo "{$groupNames[$idx]}: {$average}\n";
    }
}
?>

优化点说明:

  1. 健壮性提升:用explode分割字符串,避免直接操作字符索引的局限性,即使字符串格式有微小变化(比如多了空格),只需添加trim或过滤处理即可适配。
  2. 代码简洁冗余少:借助array_chunk自动分组、array_sum直接求和,替代重复的手动加法代码,大幅减少冗余。
  3. 维护性更强:如果分组数量、每组元素数需要调整,只需修改array_chunk的参数或groupNames数组,无需逐段修改计算逻辑。
  4. 效率更高:PHP内置数组函数是底层C实现,比手动循环加法的执行效率更高,数据量越大优势越明显。

优化后输出:

ext: 2.1
est: 4.1
agr: 3.3
csn: 3.2
opn: 2.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:45:38