0

データベースから抽出された「回答」(多次元配列) のコレクションがあります。結果をグラフに表示できるように、各値に対して計算を実行する必要があります。

入力例を次に示します。

$array = [
    'A1' => [1 => 1, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0],
    'A2' => [1 => 1, 2 => 1, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0],
    'A3' => [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0]
];

この種のロジックを使用して、多次元配列からパーセンテージ値を計算したい:

[A1] => Array( ([1]*100/sum([1]+[1]+[1]), [2]*100/sum([2]+[2]+[2]),..... )
[A2] => Array( ([1]*100/sum([1]+[1]+[1]), [2]*100/sum([2]+[2]+[2]),..... )
[A3] => Array( ([3]*100/sum([1]+[1]+[1]), [2]*100/sum([2]+[2]+[2]),..... )

これどうやってするの?

私の望む出力:

[
  'A1' => [1 => 50, 2 => 0,   3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0],
  'A2' => [1 => 50, 2 => 100, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0],
  'A3' => [1 => 0,  2 => 0,   3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0]
]
4

2 に答える 2

2

ああ、あなたが今何をしようとしているのか分かります。

これを試して

$totals = array();

// First get our totals.
foreach ($mainArray as $subKey => $subArray) {
    foreach ($subArray as $k => $v) {
        // Add the column to our total.
        $totals[$k] = isset($totals[$k]) ? $totals[$k] + $v : $v;
    }
}

$answers = array();
// Then build our answers.
foreach ($mainArray as $subKey => $subArray) {
    $answers[$subKey] = array();
    foreach ($subArray as $k => $v) {
        $answers[$subKey][$k] = ($v * 100) / $totals[$k];
    }
}

print_r($answers);
于 2012-11-21T00:44:38.750 に答える