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

PHP中如何从数据库返回的多组数组计算对应位置元素平均值

问题描述

从数据库获取到的原始数据格式如下:

array(4) {
  [0]=>
  array(1) {
    ["rate"]=>
    string(20) "["1.55","1","1","1"]"
  }
  [1]=>
  array(1) {
    ["rate"]=>
    string(29) "["2.55","2.55","2.55","2.55"]"
  }
  [2]=>
  array(1) {
    ["rate"]=>
    string(17) "["1","1","1","1"]"
  }
  [3]=>
  array(1) {
    ["rate"]=>
    string(29) "["1.2","1.21","1.2","1.2"]"
  }
}

需要计算每个对应位置元素的平均值:

  • 第1位:(1.55+2.55+1+1.2)/4 = 1.57
  • 第2位:(1+2.55+1+1.21)/4 = 1.44
  • 第3位:(1+2.55+1+1.2)/4 = 1.43
  • 第4位:(1+2.55+1+1.2)/4 = 1.43

最终期望结果:

["1.57","1.44","1.43","1.43"]

当前尝试的代码:

foreach($dibor_data as $key=>$value){
    if(array_key_exists($key,$sum)){
        $repeat[$key] = $repeat[$key]+1;
        $sum[$key] = $sum[$key] + json_decode($value['rate']);
    }
}
解决方案

你的现有代码问题在于直接对数组做加法运算,PHP无法直接通过+实现数组元素的逐位累加,需要按位置逐个处理。以下是完整实现方案:

步骤说明

  1. 初始化求和数组:以第一条数据的数组长度为基准,创建全0数组存储各位置总和
  2. 遍历原始数据:将每条的rate字符串转成数组,逐位累加到求和数组中
  3. 计算平均值:将求和数组的每个元素除以数据总条数,保留两位小数
  4. 转成目标JSON格式输出

完整代码示例

// 假设$dibor_data是数据库返回的原始数组
$dibor_data = [
    ["rate" => '["1.55","1","1","1"]'],
    ["rate" => '["2.55","2.55","2.55","2.55"]'],
    ["rate" => '["1","1","1","1"]'],
    ["rate" => '["1.2","1.21","1.2","1.2"]'],
];

// 初始化求和数组,基于第一条数据的长度创建全0数组
$firstRate = json_decode($dibor_data[0]['rate'], true);
$sum = array_fill(0, count($firstRate), 0);
$totalCount = count($dibor_data);

// 遍历每条数据,逐位累加数值
foreach ($dibor_data as $item) {
    $rateArray = json_decode($item['rate'], true);
    foreach ($rateArray as $index => $value) {
        $sum[$index] += (float)$value;
    }
}

// 计算平均值并保留两位小数
$average = array_map(function($total) use ($totalCount) {
    return number_format($total / $totalCount, 2);
}, $sum);

// 输出目标JSON格式结果
$result = json_encode($average);
echo $result; // 输出:["1.57","1.44","1.43","1.43"]

关键细节说明

  • json_decode传入第二个参数true,将JSON字符串转为索引数组,方便遍历操作
  • 用(float)$value将字符串转为浮点数,避免字符串拼接错误
  • number_format确保结果保留两位小数,与期望输出格式一致
  • 若数据库返回的rate数组长度不一致,可添加长度判断逻辑(如取最短长度或补0),本示例默认所有数组长度相同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:55:17