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

如何优雅计算二维数组及关联数组的各列平均值?

优雅计算数组列平均值的实用方案

嘿,针对你提出的两个计算列平均值的需求,我整理了几种简洁且可读性拉满的实现方式,不用写冗余的嵌套循环,逻辑清晰还高效:

需求1:普通二维数组的列平均值计算

先假设我们有个典型的二维数组:

$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

简洁实现技巧

用PHP内置数组函数的组合,核心逻辑一行就能搞定:

$columnAverages = array_map(
    fn($col) => array_sum($col) / count($col),
    array_map(null, ...$matrix)
);

逻辑拆解

  • array_map(null, ...$matrix):这是PHP里转置二维数组的经典小技巧,直接把原数组的行和列互换,原来的每一列瞬间变成了转置后的行
  • 外层的array_map遍历转置后的每一行(也就是原数组的列),算总和除以元素个数,直接得到列平均值

需求2:关联数组集合的列平均值(输出扁平关联数组)

假设我们有一组结构统一的关联数组,比如:

$data = [
    ['a' => 10, 'b' => 20, 'c' => 30],
    ['a' => 20, 'b' => 40, 'c' => 60],
    ['a' => 30, 'b' => 60, 'c' => 90]
];

优雅实现方式

先拿到所有键名,再逐个键计算对应值的平均值,最后组装成扁平的关联数组:

// 先获取所有键(假设所有子数组结构一致)
$keys = array_keys(reset($data));

// 用array_reduce遍历计算平均值
$averages = array_reduce($keys, function($result, $key) use ($data) {
    $values = array_column($data, $key);
    $result[$key] = array_sum($values) / count($values);
    return $result;
}, []);

逻辑说明

  • array_keys(reset($data)):取第一个子数组的键,前提是所有子数组的键都一致;如果键可能不一致,就用$keys = array_unique(array_merge(...array_map('array_keys', $data)));先合并去重所有键
  • array_column可以直接提取所有子数组中对应键的取值,省去手动循环取值的麻烦
  • 如果是PHP 7.4及以上版本,用箭头函数能让代码更短:
$averages = array_combine(
    $keys = array_keys(reset($data)),
    array_map(fn($k) => array_sum(array_column($data, $k)) / count($data), $keys)
);

额外优化提示

  • 如果数组里可能有空值或者子数组长度不一致,可以把count($col)换成count(array_filter($col)),排除空值后再计算平均值
  • 这些方法都是用PHP内置数组函数实现的,比手动写嵌套循环效率更高,大数据量下也能稳定运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:33