2014-08-28 142 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