我需要计算关联数组中每列数据的平均值。结果应该是一个扁平的、关联的平均值数组。
样品阵列:
$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,
]
2条答案
按热度按时间cygmwpex1#
假设每个子数组具有相同的键:
r55awzrz2#
这里有一个函数式的方法,它将像@AbraCadaver的答案一样工作。
代码:(Demo)
1.我使用
?? []
作为实时应用程序的保护措施,在这些应用程序中,输入数组可能为空(并且在[0]
处不包含元素)。1.使用PHP7.4的arrow函数语法允许在没有
use()
语句的情况下访问输入数组。1.自定义函数中的
+
不做加法;它将结果数组与新的关联数组合并--这用于将新元素推入返回的结果数组中。