我有一个数组,它看起来像这样(以及赋值):
loop thru students {
$count = 0;
loop thru classes {
$myArr[$obj->student][$count] = $grade;
}
}
我在一个表中有数据:沿着顶部标题的是类。sides
沿线是学生。每个交叉引用的单元格都是学生的成绩。我希望最下面的行是一个班上所有学生的平均成绩。
我在上面的数组中有我需要的信息(第一部分是学生id,第二部分是班级数量:永远是一样的。
我正在努力提取我需要获得平均值的信息:
我基本上需要先循环到第二部分,以获得学生总数和平均成绩。我不确定我这样做是否是数组顺序的最佳方式。但这是重要的信息:外循环是学生,内循环是类:所以这就是为什么我选择了我使用的顺序
有人能帮我走上正轨吗?一开始似乎很琐碎。
编辑--按要求添加数据:
样本数据;学生证和成绩;(有些成绩是空白的,但请忽略并假设它们会被填写;我会处理这些)
[18273372] => Array
(
[0] => 40%
[1] => 50%
[2] => 100%
[3] => 20%
[4] => ---
[5] => ---
[6] => ---
[7] => ---
[8] => ---
[9] => ---
[10] => ---
[11] => ---
[12] => 50%
[13] => ---
[14] => ---
[15] => ---
)
[18273372] => Array
(
[0] => 50%
[1] => 50%
[2] => 100%
[3] => 50%
[4] => ---
[5] => ---
[6] => ---
[7] => 55%
[8] => ---
[9] => 70%
[10] => ---
[11] => ---
[12] => 50%
[13] => ---
[14] => ---
[15] => ---
)
我需要平均数;例如,职位(或级别)0平均为45%。同样,0-15表示16个不同的类。每个学生的0班是一样的。
编辑:
这是我的更新程序代码:
$avg[$obj->s_i_student_num][$count] = $gradebook->unitPercentage[$count];
$totals = array();
foreach($avg as $student_id => $scores) {
foreach($scores as $id => $percent) {
if ($percent == "---") { continue; }
$percent = (int) $percent;
$totals[$id][] = $percent;
}
}
这里有一种方法:循环查看结果,并按键将每个百分比保存到一个临时数组中,将它们分组在一起:
$totals = array();
foreach($test_data as $student_id => $scores) {
foreach($scores as $id => $percent) {
// Trim off the percent sign
$percent = (int) $percent;
// Initialize array key if it's the first time
if(!array_key_exists($id, $totals))
$totals[$id] = array();
$totals[$id][] = $percent;
}
}
然后,在该数组上运行一次遍历,按键对所有结果进行平均,并将您的百分比符号添加回:
// Affect original: pass variable by reference (&)
array_walk($totals, function(&$value) {
// Sum values, divide by the size of the array (average) then add % on
$value = array_sum($value) / count($value) . '%';
});
print_r($totals)
显示:
Array
(
[0] => 45%
[1] => 50%
[2] => 100%
[3] => 35%
[12] => 50%
[7] => 55%
[9] => 70%
)
那里的关键点是每个数组中原始分数的关键点演示