0

値を追加してから、追加された重複を削除して処理する必要がある配列があります。

これが元の配列です...

Array (     
[0] => Array ( [PID] => 2872 [QTY] => 1 ) 
[1] => Array ( [PID] => 3145 [QTY] => 2 ) 
[2] => Array ( [PID] => 3107 [QTY] => 1 ) 
[3] => Array ( [PID] => 2739 [QTY] => 1 ) 
[4] => Array ( [PID] => 3137 [QTY] => 1 ) 
[5] => Array ( [PID] => 3107 [QTY] => 1 ) 
[6] => Array ( [PID] => 2739 [QTY] => 1 ) 
[7] => Array ( [PID] => 3107 [QTY] => 1 ) 
[8] => Array ( [PID] => 3137 [QTY] => 4 ) 
[9] => Array ( [PID] => 3551 [QTY] => 1 ) 
[10] => Array ( [PID] => 3107 [QTY] => 1 ) 
[11] => Array ( [PID] => 3107 [QTY] => 1 ) 
[12] => Array ( [PID] => 3137 [QTY] => 1 ) 
[13] => Array ( [PID] => 3551 [QTY] => 2 ) 
[14] => Array ( [PID] => 3136 [QTY] => 1 ) 
[15] => Array ( [PID] => 3137 [QTY] => 1 ) 
[16] => Array ( [PID] => 3032 [QTY] => 1 ) 
[17] => Array ( [PID] => 3551 [QTY] => 1 ) 
[18] => Array ( [PID] => 3107 [QTY] => 1 )
[19] => Array ( [PID] => 3459 [QTY] => 1 ) 
[20] => Array ( [PID] => 3141 [QTY] => 1 )
[21] => Array ( [PID] => 2724 [QTY] => 1 ) 
[22] => Array ( [PID] => 2743 [QTY] => 1 )
[23] => Array ( [PID] => 3139 [QTY] => 2 )
[24] => Array ( [PID] => 3137 [QTY] => 2 ) 
[25] => Array ( [PID] => 3107 [QTY] => 1 ) 
)

私がする必要があるのは、この配列を取得し、同じ [PID] 値から [QTY] 値を追加してから、このような配列になることです...

Array ( 
[0] => Array ( [PID] => 2724 [QTY] => 1 ) 
[1] => Array ( [PID] => 2739 [QTY] => 2 ) 
[2] => Array ( [PID] => 2743 [QTY] => 1 )
[3] => Array ( [PID] => 2872 [QTY] => 1 ) 
[4] => Array ( [PID] => 3032 [QTY] => 1 ) 
[5] => Array ( [PID] => 3107 [QTY] => 7 ) 
[6] => Array ( [PID] => 3136 [QTY] => 1 ) 
[7] => Array ( [PID] => 3137 [QTY] => 9 ) 
[8] => Array ( [PID] => 3139 [QTY] => 2 )
[9] => Array ( [PID] => 3141 [QTY] => 1 )
[10] => Array ( [PID] => 3145 [QTY] => 2 ) 
[11] => Array ( [PID] => 3459 [QTY] => 1 ) 
[12] => Array ( [PID] => 3551 [QTY] => 4 ) 
)

したがって、すべての QTY を追加してから、重複を削除します。

ここで先に進む最善の方法がよくわかりません。助言がありますか?

4

2 に答える 2

2

それらをループし、PID をキーとして、QTY を値として新しい配列を作成し、後者を追加できるようにします。

foreach ($array as $row) {
    list($pid, $qty) = $row;
    $sums[$pid] += $qty;
}

isset明らかに、通知を抑制するために を投入できます。

以前の配列構造が必要な場合は、もう一度変換します。

于 2012-11-09T23:41:41.543 に答える
1

Id は単純なループを使用するだけです。

$combined = array();
// $org will be the original structure

foreach($org as $id => $data) {
   $pid = $data['PID'];
   if(!isset($combined[$pid])) {
     $combined[$pid] = $data;
   } else {
     $combined[$pid]['QTY'] += $data['QTY'];
   }
}

// return keys to normal indexs instead of the PID
array_values($combined);
于 2012-11-09T23:42:25.317 に答える