从多维数组中获取每个数组的平均值

时间:2016-08-18 17:38:59

标签: php arrays multidimensional-array

我有一个多维的学生阵容' name'和'得分':

$student = array('Alice' => array(84, 93, 88, 100, 92, 84) ,
                 'bob' => array(92, 47, 68, 79, 89) , 
                 'charlie' => array(73, 85, 84, 69, 67, 92) , 
                 'denis' => array(59, 92, 83, 79, 73) , 
                 'eve' => array(91, 68, 85, 79, 84));

现在,我想找到最高的'五的平均值。每个学生的分数:

foreach ($students as $student => $key){
    echo $student . '<br>';

    arsort($key);

    $value   = array_slice($key, 0,5);

    foreach ($value as $output){
        $total    += $output . '<br />';

        $average   = $total / count($value);

    }
    echo $average . '<br/>';
}

我的问题是,不是给所有学生的平均值,而是给出第一个学生&#39; Alice&#39;的平均值。我该怎么做才能获得所有学生的平均成绩?

3 个答案:

答案 0 :(得分:0)

有几个问题,但只需将内部foreach()替换为:

$average = array_sum($value) / count($value);

所以:

foreach ($students as $student => $key){
    echo $student . '<br>';
    arsort($key);
    $value   = array_slice($key, 0,5);
    $average = array_sum($value) / count($value);
    echo $average . '<br/>';
}

答案 1 :(得分:0)

如果我正确理解了这个问题,可以使用以下代码将每个学生的前5个分数添加到数组中,然后对该数组进行平均。

$scores = array();

foreach ($students as $student => $key){

     // Sort this student's scores
     arsort($key);

     // Add the top 5 scores to the scores array
     $scores = array_merge($scores, array_slice($key, 0,5));

}

// Average of all the top 5 scores
$average =  array_sum($scores) / count($scores);

答案 2 :(得分:0)

您目前采用的方法存在三个主要问题。

  1. 您在循环的每次迭代中覆盖$average的值
  2. 您正在计算每个分数的平均N
  3. 您错误地将平均值说明为SUM([score1...score5]) / N
  4. 以下是每位学生前5名成绩平均值的正确实施:

    $students = [
        'Alice'   => [84, 93, 88, 100, 92, 84],
        'bob'     => [92, 47, 68, 79, 89],
        'charlie' => [73, 85, 84, 69, 67, 92],
        'denis'   => [59, 92, 83, 79, 73],
        'eve'     => [91, 68, 85, 79, 84],
    ];
    
    $averages = array_map(function($scores) {
        arsort($scores);
        return array_sum(array_slice($scores, 0, 5)) / 5;
    }, $students);
    
    var_dump($averages);
    
    /* this gives us something like ... 
    array(5) {
      ["Alice"]=>
      float(91.4)
      ["bob"]=>
      int(75)
      ["charlie"]=>
      float(80.6)
      ["denis"]=>
      float(77.2)
      ["eve"]=>
      float(81.4)
    }
    */
    

    请注意,要说$average = array_sum(array_slice($scores, 0, 5)) / count($scores)实际上不正确,因为您只是将5得分归为平均值,您不需要除以count($scores),而是除以{ {1}}而不是。