计算嵌套数组对象中的值的平均值(PHP)

时间:2018-02-06 21:25:25

标签: php arrays

我在这里有一个问题,我希望它能够从SO社区获得帮助。我在我的PHP代码中声明了一个如下所示的数组:

$array = array:4 [▼
  0 => array:3 [▼
    "a" => 0.333
    "b" => 0.730
    "c" => 0.393
  ]
  1 => array:3 [▼
    "a" => 0.323
    "b" => 0.454
    "c" => 0.987
  ]
  2 => array:3 [▼
    "a" => 0.753
    "b" => 0.983
    "c" => 0.123
  ]
]

我正在寻找一种更简单的方法来处理所有数组元素并生成一个具有所有相应值的平均值(平均值)的单个数组,即:

array (
  a => average of a's
  b => average of all b's
  c => average of all c's
)

这是我在下面写的代码(有效):

$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($ac/count($c)
);

我有一种感觉,鉴于处理数组的众多PHP函数,这不是实现这一目标的最有效方法。我想知道是否有一种更简单的方法可以做到这一点。谢谢你们!

1 个答案:

答案 0 :(得分:3)

假设每个子阵列具有相同的键:

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