2013-04-28 72 views
0

我對PHP相當陌生,並試圖對一個類項目進行排序。我已經衝出去了,看不出來,這是剩下的最後一塊。PHP:平均分類按年份分類

我有一個表格 - 基本上提交2個數組我試圖確定基於類別分組的平均分數。 1.($ _post ['category']),($ _post ['score']) - 類別是基於文本的數組,分數顯然是基於數字的。

我該如何去尋找每個類別的平均分數?我試過各種選項來映射兩個數組,然後嘗試平均分數。我可以非常輕鬆地獲得總平均分,但是找到一種方法可以逐個完成每個分類,這讓我倍感失望。

我需要將權重應用於每個類別分數,但是一旦您獲得上述排序,這似乎很容易。

感謝, 史蒂夫

$ _ POST例如:

Array (
    [0] => Assignment 
    [1] => Assignment 
    [2] => Assignment 
    [3] => Assignment 
    [4] => Assignment 
    [5] => Assignment 
    [6] => Exam 
    [7] => Assignment 
    [8] => Assignment 
    [9] => Assignment 
    [10] => Exam 
    [11] => Exam 
    [12] => Final Project 
) 
Array (
    [0] => 100 
    [1] => 100 
    [2] => 100 
    [3] => 98 
    [4] => 90 
    [5] => 92 
    [6] => 100 
    [7] => 100 
    [8] => 100 
    [9] => 100 
    [10] => 100 
    [11] => 92 
    [12] => 100 
) 
+0

舉一個你$ _POST數組的樣子的例子。 'print_r'可以。 – pilsetnieks 2013-04-28 19:15:40

+0

Array [(0] => Assignment [1] => Assignment [2] => Assignment [3] => Assignment [4] => Assignment [5] => Assignment [6] => Exam [7] =>分配[8] =>分配[9] =>分配[10] =>考試[11] =>考試[12] =>最終項目) 數組([0] => 100 [1] => 100 [2] => 100 [3] => 98 [4] => 90 [5] => 92 [6] => 100 [7] => 100 [8] => 100 [9] => 100 [10 ] => 100 [11] => 92 [12] => 100) – 2013-04-28 19:18:28

+0

您好pilsetnieks - 上面是兩個陣列的輸出 – 2013-04-28 19:21:33

回答

0

有幾種方法去這個問題,這裏有一個:

// create arrays 
$cat = array(
    "Assignment", "Assignment", "Assignment", 
    "Assignment", "Assignment", "Assignment", 
    "Exam", "Assignment", "Assignment", 
    "Assignment", "Exam", "Exam", "Final Project"); 

$grade = array(100,100,100,98,90,92,100,100,100,100,100,92,100); 

// create $result: key = cat, values = sum, count, avg = 0 
$result = array_fill_keys($cat, array('sum' => 0, 'count' => 0, 'avg' => 0)); 

$max = count($cat); 

// add grades to category in $result[cat][sum] 
for ($i = 0; $i < $max; $i++) 
    $result[$cat[$i]]['sum'] += $grade[$i]; 

// count number of categories in $cat 
$num = array_count_values($cat); 

// fill $result[cat][count]... 
// then divide each cat's sum by each cat's count => $result[cat][avg] 
foreach ($result as $k => $v) { 
    $result[$k]['count'] = $num[$k]; 
    $result[$k]['avg'] = round($result[$k]['sum']/$num[$k], 2); 
} 

結果:

Array 
(
    [Assignment] => Array 
     (
      [sum] => 880 
      [count] => 9 
      [avg] => 97.78 
     ) 

    [Exam] => Array 
     (
      [sum] => 292 
      [count] => 3 
      [avg] => 97.33 
     ) 

    [Final Project] => Array 
     (
      [sum] => 100 
      [count] => 1 
      [avg] => 100 
     ) 

) 

看到它的工作:http://codepad.viper-7.com/QQAaXD