0

Stackoverflowには、多次元の連想配列を取得してその中の値を合計する方法に関する多くの優れたQ&Aがあります。残念ながら、キー名失われていないものは見つかりません。

例えば:

$arr=array(
      array('id'=>'1', 'amount'=>'5'),
      array('id'=>'1', 'amount'=>'5'),
      array('id'=>'2', 'amount'=>'1'),
      array('id'=>'2', 'amount'=>'3')
);

結果の配列は次のようになります。

$result=array(
  array('id'=>'1', 'amount'=>'10'),
  array('id'=>'2', 'amount'=>'4')
);

残念ながら、私が理解できる唯一のことはこれです:

$result = array();
foreach($arr as $amount){
  if(!array_key_exists($amount['id'], $arr))          
  $result[$amount['id']] =0; 
  $result[$amount['id']] += $amount['amount'];
}

次の場合echo'd、次のようになります(キーの単語「id」と「amount」がないことに注意してください)。

foreach($result as $id => $amount){
  echo $id."==>".$amount."\n";
}

1==>10
2==>4
4

2 に答える 2

1

これは、最初に必要なデータがすでにあることを示すためだけのものですが、受け入れた答えがそれを処理するためのより良い方法です。

そもそも次のようなものがありますか?

$arr = array(
    array('id'=>'1', 'amount'=>'5'),
    array('id'=>'1', 'amount'=>'5'),
    array('id'=>'2', 'amount'=>'1'),
    array('id'=>'2', 'amount'=>'3')
);

出力

Array
(
    [0] => Array
        (
            [id] => 1
            [amount] => 5
        )
    [1] => Array
        (
            [id] => 1
            [amount] => 5
        )
    [2] => Array
        (
            [id] => 2
            [amount] => 1
        )
    [3] => Array
        (
            [id] => 2
            [amount] => 3
        )
)

次に、次のアルゴリズムを実行します。

$summedArr = array();

foreach ($arr as $amount) {
    $summedArr['amount'][$amount['id']] += $amount['amount'];
    $summedArr['id'][$amount['id']] = $amount['id'];
}

Noticeここで、まだ存在していないインデックスを参照しているために生成される警告を無視すると、次のように出力されます。

出力

Array
(
    [amount] => Array
        (
            [1] => 10
            [2] => 4
        )
    [id] => Array
        (
            [1] => 1
            [2] => 2
        )
)

鍵はもう見えますか?やってるから。

次に、配列を繰り返し処理します。

foreach ($summedArr as $key => $value) {
    echo $k . "==>" . $v . "\n";
}

出力

amount==>Array
id==>Array

しかし、それはあなたが望むものではありません。あなたが欲しい:

foreach ($summedArr as $key => $arr) {
    foreach ($arr as $v) {
        echo $key . "==>" . $v;
    }
}
于 2013-02-05T20:15:41.597 に答える
0

その方法を使用して、最後に必要な配列を再構築してみませんか?

$results = array();
foreach ($arr as $id=>$amount) {
    $results[] = array('id' => $id, 'amount' => $amount);
}

これを行う他の方法は、計算コストが高くなります。

于 2013-02-05T20:01:14.247 に答える