php 计算二维数组中每列的平均值

xvw2m8pv  于 2023-01-08  发布在  PHP
关注(0)|答案(2)|浏览(125)

我需要计算关联数组中每列数据的平均值。结果应该是一个扁平的、关联的平均值数组。
样品阵列:

$array = [
  [
    "a" => 0.333,
    "b" => 0.730,
    "c" => 0.393
  ],
  [
    "a" => 0.323,
    "b" => 0.454,
    "c" => 0.987
  ],
  [
    "a" => 0.753,
    "b" => 0.983,
    "c" => 0.123
  ]
];

我正在寻找一种更简单的方法来处理所有数组元素,并生成一个具有所有对应值的平均值的单个数组。
我目前的代码可以工作,但我希望有一个更优雅的方法。

$a = []; // Store all a values
$b = []; // Store all b values
$c = []; // Store all c values

for ( $i = 0; $i < count( $array ); $i ++ ) {
    // For each array, store each value in it's corresponsing array
    // Using variable variables to make it easy
    foreach ( $array[ $i ] AS $key => $val ) {
        $k    = $key;
        $$k[] = $val;
    };
}

// Create single array with average of all
$fa = array(
    'a' => array_sum($a) / count($a),
    'b' => array_sum($b) / count($b),
    'c' => array_sum($c) / count($c)
);

预期结果:

[
    'a' => 0.4696666666666667,
    'b' => 0.7223333333333333,
    'c' => 0.501,
]
cygmwpex

cygmwpex1#

假设每个子数组具有相同的键:

foreach(array_keys($array[0]) as $key) {
    $result[$key] = array_sum($tmp = array_column($array, $key))/count($tmp);
}
  • 从第一个子数组中获取键
  • 循环,从主数组中提取这些值并计算
r55awzrz

r55awzrz2#

这里有一个函数式的方法,它将像@AbraCadaver的答案一样工作。
代码:(Demo

var_export(
    array_reduce(
        array_keys($array[0] ?? []),
        fn($result, $k) => $result + [$k => array_sum($c = array_column($array, $k)) / count($c)],
        []
    )
);

1.我使用?? []作为实时应用程序的保护措施,在这些应用程序中,输入数组可能为空(并且在[0]处不包含元素)。
1.使用PHP7.4的arrow函数语法允许在没有use()语句的情况下访问输入数组。
1.自定义函数中的+不做加法;它将结果数组与新的关联数组合并--这用于将新元素推入返回的结果数组中。

相关问题