以前、同様の内容をhttps://teratail.com/questions/14889 にて質問をさせていただき下記の回答をいただいたのですが、
配列の数が多い場合、全ての配列の中身が正常に重複を削除されないことがでてきました。
php
1$buf = array(); 2foreach ($array as $i => $a) { 3 if (empty($buf[$a['id']])) { 4 $buf[$a['id']] = $i; 5 } else { 6 $array[$buf[$a['id']]]['amount'] += $a['amount']; 7 unset($array[$i]); 8 } 9}
配列例
処理前の配列
php
1Array 2( 3 [0] => Array 4 ( 5 [id] => 21462 6 [amount] => 2 7 ) 8 9 [1] => Array 10 ( 11 [id] => 21462 12 [amount] => 2 13 ) 14 15 [2] => Array 16 ( 17 [id] => 21351 18 [amount] => 3 19 ) 20 21 [3] => Array 22 ( 23 [id] => 21351 24 [amount] => 3 25 ) 26 27 [4] => Array 28 ( 29 [id] => 21352 30 [amount] => 3 31 ) 32 33 [5] => Array 34 ( 35 [id] => 21352 36 [amount] => 3 37 ) 38 39 [6] => Array 40 ( 41 [id] => 13394 42 [amount] => 2 43 ) 44 45 [7] => Array 46 ( 47 [id] => 13394 48 [amount] => 2 49 ) 50 51 [8] => Array 52 ( 53 [id] => 502 54 [amount] => 3 55 ) 56 57 [9] => Array 58 ( 59 [id] => 502 60 [amount] => 3 61 ) 62 63 [10] => Array 64 ( 65 [id] => 500 66 [amount] => 2 67 ) 68 69 [11] => Array 70 ( 71 [id] => 500 72 [amount] => 2 73 ) 74 75)
処理後の配列
php
1Array 2( 3 [0] => Array 4 ( 5 [id] => 21462 6 [amount] => 2 7 ) 8 9 [1] => Array 10 ( 11 [id] => 21462 12 [amount] => 2 13 ) 14 15 [2] => Array 16 ( 17 [id] => 21351 18 [amount] => 6 19 ) 20 21 [4] => Array 22 ( 23 [id] => 21352 24 [amount] => 6 25 ) 26 27 [6] => Array 28 ( 29 [id] => 13394 30 [amount] => 4 31 ) 32 33 [8] => Array 34 ( 35 [id] => 502 36 [amount] => 6 37 ) 38 39 [10] => Array 40 ( 41 [id] => 500 42 [amount] => 4 43 ) 44 45)
のようになります。
基本は重複を削除でき、束ねられるのですが、上記の例ではid 21462の部分がうまく重複を削除し、加算ができておりませんでした。
全ての値で重複を削除し、amount値を加算できず困っております。
何卒よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/06 08:33