0

私はPHPにかなり慣れていないので、クラスプロジェクトをソートしようとしています。私は叩いてしまい、それを整理することができません。これが最後の残りの部分です.

フォームがあります - 基本的に 2 つの配列を送信して、カテゴリ グループに基づいて平均スコアを決定しようとしています。1. ($_post['category']), ($_post['score']) - カテゴリはテキスト ベースの配列で、スコアは明らかに数値ベースです。

各カテゴリの平均スコアを見つけるにはどうすればよいですか? 2 つの配列をマッピングし、成績を平均化するためにさまざまなオプションを試しました。合計スコアの平均を簡単に求めることができますが、これをカテゴリごとに個別に行う方法を見つけるのは大変です。

各カテゴリ スコアに重みを適用する必要がありますが、上記を並べ替えると、それは非常に簡単に思えます。

ありがとう、スティーブ

$_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
)
4

1 に答える 1

0

これにはいくつかの方法がありますが、ここではその 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

于 2013-04-28T21:16:11.590 に答える