从多维数组
问题描述:
我的学生的名字'和“分数”多维数组获取每个数组的平均值为:从多维数组
$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/>';
}
我的问题是,不是给所有学生的平均水平,这是给只有第一个学生“爱丽丝”的平均值。我该如何获得所有学生的平均水平?
答
的几个问题,但只需更换你的内心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/>';
}
答
如果我理解正确的问题,下面的代码可以用来增加每个学生的前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);
答
您目前采用的方法存在三个主要问题。
- 您与每次循环覆盖的
$average
值 - 您计算平均
N
次,每次得分 - 你错误地陈述平均为
SUM([score1...score5])/N
以下是每个学生排名前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)
划分,而是由5
代替。
您正在计算生成总数的同一个循环内部的平均值。这实际上应该在内部循环之外(你回应平均值)。 – scrappedcola
我认为这个问题有点模糊。你是否想要得到每个学生前五名成绩的平均水平?或者你是否要求统计所有学生的前五个年级的平均水平? – Sherif
获得每个学生的前5个年级的平均数#Sherif – syed