2013-04-28 2 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

+0

Массив ([0] => Назначение [1] => Назначение [2] => Назначение [3] => Назначение [4] => Назначение [5] => Назначение [6] => Экзамен [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) –

+0

Hi pilsetnieks - выше вывод обоих массивов –

ответ

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

Смежные вопросы