2

このスレッドに適したタイトルを取得できません(助けてください)。この問題を説明することはできないので、ここに私の問題の例を示します。

私の配列:

Array ( [0] => Array ( [answer] => a [score] => 3 )
[1] => Array ([answer] => b [score] => 4 ) 
[2] => Array ( [answer] => h [score] => 3) 
[3] => Array ( [answer] => a [score] => 4 ))
...

そして、私はこのような出力を取得したいです:

Array ( [0] => Array ( [answer] => a [score] => 7 )
[1] => Array ([answer] => b [score] => 4 ) 
[2] => Array ( [answer] => h [score] => 3))
...

インデックスキー0のスコアサブキーの変化を確認できます。これは、インデックスキー0と3の回答サブキーに2つの値「a」があるために発生します。両方の合計(3 + 4)により、スコアが7に変更されました。 。本当に私はこれについての考えを持っていません、私の英語を申し訳ありません、そして助けてくれてありがとう。コメントしてください。:)

4

3 に答える 3

3
$merged = array();

foreach ($array as $answer) {
    if (isset($merged[$answer['answer']])) {
        $merged[$answer['answer']]['score'] += $answer['score'];
    } else {
        $merged[$answer['answer']] = $answer;
    }
}

var_dump($merged);
于 2013-03-26T07:57:11.057 に答える
1

ループを使用せずに、この答えを確認してください:

$arr  = array ( array ( 'answer' => 'a', 'score' => 3 ),
                array ( 'answer' => 'b', 'score' => 4 ), 
                array ( 'answer' => 'h', 'score' => 3), 
                array ( 'answer' => 'a', 'score' => 4 ));

$t = array_reduce($arr, function($result, $item) {
        if(array_key_exists($item['answer'],$result)){
           $result[$item['answer']]    = array('answer' => $item['answer'], 'score' => $item['score']+$result[$item['answer']]['score']);
        }
        else{
           $result[$item['answer']]    = array('answer' => $item['answer'], 'score' => $item['score']);
        }
    return $result;
},array()); 

echo "<pre>";
print_r($t);

出力:

Array
(
    [a] => Array
        (
            [answer] => a
            [score] => 7
        )

    [b] => Array
        (
            [answer] => b
            [score] => 4
        )

    [h] => Array
        (
            [answer] => h
            [score] => 3
        )

)
于 2013-03-26T08:57:30.967 に答える
0

私は一時的な配列を使用することを考えています:

/* Current array */
$array = array(
    array("answer" => "a", "score" => 3),
    array("answer" => "b", "score" => 4),
    array("answer" => "h", "score" => 3),
    array("answer" => "a", "score" => 4)
);

/* Using a temporary array */
$tmp_array = array();
foreach($array as $subarray){
    if(array_key_exists($subarray["answer"], $tmp_array)){
        $tmp_array[$subarray["answer"]] += $subarray["score"];
    }else{
        $tmp_array[$subarray["answer"]] = $subarray["score"];
    }
}

/* Creating a new formatted array */
$new_array = array();
foreach($tmp_array as $key => $value){
    $new_array[] = array("answer" => $key, "score" => $value);
}

print_r($new_array);
于 2013-03-26T08:03:11.180 に答える