2012-11-09 53 views
0

我有一个数组,我需要通过添加值来处理,然后删除任何添加的重复项。添加值他们删除重复在一个PHP数组

这里的原始数组...

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) 
) 

因此,添加所有的数量,然后删除重复项。

我不太确定在这里进行的最佳途径。有什么建议么?

+0

看看@ http://stackoverflow.com/questions/1861682/php-multi-dimensional-array-remove-duplicate –

回答

1

编号只是用一个简单的循环:

$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); 
+0

这就是我一直在寻找谢谢! – Monty

2

在它们上面循环,创建一个新的数组,其中PID作为键和数量作为值,因此您可以添加后者。

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

很明显,您可以投入isset来压制通知。

如果你想要你以前的数组结构,再次转换它。