Php 从多维数组中获取每个数组的平均值
我有一个多维的学生名字和分数数组:Php 从多维数组中获取每个数组的平均值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维的学生名字和分数数组: $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,
$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($student as$student=>$key){
echo$student.“
”;
阿尔索特(钥匙);
$value=array\u slice($key,0,5);
foreach($value作为$output){
$total+=$output'
';
$average=$total/count($value);
}
回声$average.“
”;
}
我的问题是,不是给所有学生的平均分,而是只给第一个学生“爱丽丝”的平均分。我应该怎么做才能得到所有学生的平均数?有几个问题,但只需将您的内部
foreach()
替换为:
$average = array_sum($value) / count($value);
因此:
foreach($student as$student=>$key){
echo$student.“
”;
阿尔索特(钥匙);
$value=array\u slice($key,0,5);
$average=数组总和($value)/计数($value);
回声$average.“
”;
}
如果我正确理解了问题,可以使用以下代码将每个学生的前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
$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\u sum(array\u slice($scores,0,5))/count($scores)
实际上是不正确的,因为您只对排名靠前的5
分数取平均值,不需要除以count($scores)
但改为5
。对于其中一个,您正在计算生成总数的同一循环内的平均值。这实际上应该在内部循环之外(在那里你会重复平均值)。我认为这个问题有点模棱两可。你是想得到每个学生前五名的平均成绩吗?或者你是在要求获得所有学生前5名的平均成绩?获得每个学生前5名的平均成绩#谢里夫还有一件事,如果我们不想使用php函数“arsort”进行排序,“array_slice”用于限制数组和“array_sum”。。我们如何在不使用这些函数的情况下执行相同的程序??使用循环或if_条件?
$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)
}
*/