0

私はすべての組み合わせを試してきました、array_count_valuesそしてarray_map私は考えることができます。私はあなたが私に道を教えてくれることを望んでいます。

サンプル配列は次のとおりです。

$arr = array(
            array('name' => 'foo','score' => 1),
            array('name' => 'foo','score' => 2),
            array('name' => 'bar','score' => 1)
        );

すべてのサブ値のスコアを同じ名前で結合したいと思います。GROUP BY nameMySQLのようなもの。

Array
(
    [0] => Array
        (
            [name] => foo
            [score] => 3
        )

    [1] => Array
        (
            [name] => bar
            [score] => 1
        )
)

多次元配列を並べ替える質問が他にもあることは知っていますが、途中でサブ値の1つを合計する質問を見つけることができません。

4

1 に答える 1

1

使用できますarray_reduce

$arr = array(
        array('name' => 'foo','score' => 1),
        array('name' => 'foo','score' => 2),
        array('name' => 'bar','score' => 1));

$array = array_reduce($arr, function ($a, $b) {
    isset($a[$b['name']]['score']) ? $a[$b['name']]['score'] += $b['score'] : $a[$b['name']] = $b;
    return $a;
});

var_dump($array);

出力

array
  'foo' => 
    array
      'name' => string 'foo' (length=3)
      'score' => int 3
  'bar' => 
    array
      'name' => string 'bar' (length=3)
      'score' => int 1
于 2012-10-31T11:55:21.910 に答える