2014-08-28 141 views
-1
查找平均值

我有看起来像这样(与指定的值一起)的数组:从多维阵列中PHP

loop thru students { 
    $count = 0; 
    loop thru classes { 
      $myArr[$obj->student][$count] = $grade; 
    } 
} 

我在表中有数据:沿顶部头是类。沿着sides是学生。每个交叉引用的单元格都是学生成绩。我希望底部的行是班级中所有学生的平均成绩。

我有我需要的上述阵列中的信息(第一部分是学生证,第二部分是多少类的计数。这将始终是相同的

我的一部分奋斗着提取信息我需要得到平均值:

我基本上需要循环通过第二部分首先得到学生的总数和平均数我不知道我做这个最好的但是这是重要的信息:外循环是学生,内循环是类:所以这就是为什么我选择了orde我用过。

有人能帮助我走上正确的轨道吗?开始似乎很微不足道。

编辑 - 添加数据,问道:

的样本数据;学生证和年级; (一些等级是空白的,但请忽略,并假设他们将被填充;我将处理这些)

[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; 

         } 
       } 
+1

你可能会输出一个print_r的数据或样本数组。我认为任何人都不想输入一个样本来测试。 – 2014-08-28 23:01:42

+0

@JonathanKuhn我已经添加了数据 – KickingLettuce 2014-08-28 23:09:16

回答

2

这里有一个方法:遍历你的结果,通过键一个百分点保存到一个临时数组,它们全部组合在一起:

$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% 
) 

的按键有每个阵列中的原始得分的关键。 Demo.

+0

实际上,作为整数行投射并不是必须的,因为无论如何,它会发生。虽然可以保留在那里以供参考。 – 2014-08-28 23:20:49

+0

谢谢!我不认为我很快就会得出这个结论。我在我的PHP日志中遇到这个错误,'[]运算符不支持字符串';指向这一行:'$ totals [$ id] [] = $ percent;'(上面添加的代码) – KickingLettuce 2014-08-28 23:25:25

+1

我已经更新了答案。你需要初始化数组密钥,然后再使用它 - 我的错,懒惰:) – 2014-08-28 23:29:01