【问题标题】:PHP: Avg Grade by categoryPHP:按类别平均成绩
【发布时间】:2013-04-28 19:12:31
【问题描述】:

我对 PHP 还很陌生,正在尝试对类项目进行排序。我已经撞到了,看不到整理,这是最后剩下的一块。

我有一个表格 - 基本上提交 2 个数组,我试图根据类别分组确定平均分数。 1. ($_post['category']), ($_post['score']) - category 是一个基于文本的数组,而 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
)

【问题讨论】:

  • 举例说明你的 $_POST 数组是什么样子的。 print_r 可以。
  • 数组 ( [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)
  • 嗨 pilsetnieks - 以上是两个数组的输出

标签: php arrays calculator


【解决方案1】:

有几种方法可以解决这个问题,这是一种:

// 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 2021-05-03
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多