2009-06-18 74 views
0

我必須總結一些數組(數組數組)。我的陣列的結構是這樣的:sum arrays

Array([id]=>some_id, [name]=>some_name, [value]=>float_value) 

我知道,我有N個數組作爲前一個。我需要對那些具有相同ID的人進行總結。

有什麼想法嗎?

例子:
**

Array 
(
    [id] => 1 
    [name] => John00 
    [value] => 0.9 
) 
Array 
(
    [id] => 2 
    [name] => Ann01 
    [value] => 0.011 
) 
Array 
(
    [id] => 3 
    [name] => Ann 
    [value] => 0.1 
) 

**

回答

2

我不能完全知道你正在嘗試做的 - 我想你想的ID爲分組總和每個不同的ID,但我可能是錯的。

<?php 
//result array of sums 
$sums = array(); 

//example data 
$source = array(
    array('id'=>3, 'name'=>'some_name6', 'value'=>1.6), 
    array('id'=>1, 'name'=>'some_name', 'value'=>1.4), 
    array('id'=>1, 'name'=>'some_name2', 'value'=>7.2), 
    array('id'=>2, 'name'=>'some_name3', 'value'=>4.4), 
    array('id'=>1, 'name'=>'some_name4', 'value'=>1.2), 
    array('id'=>2, 'name'=>'some_name5', 'value'=>1.4), 
); 

foreach ($source as $ar) { 
    //create an entry for this id in the array of sums if does not exist. 
    if (!isset($sums[ $ar['id'] ])) { 
     $sums[ $ar['id'] ] = 0; 
    } 

    //add 'value' key to sum for that id 
    $sums[ $ar['id'] ] += $ar['value']; 
} 

//sort by id 
ksort($sums); 

print_r($sums); 

/* output: 
Array 
(
    [1] => 9.8 
    [2] => 5.8 
    [3] => 1.6 
) 
*/ 
+0

你認爲正確的,但我只得到了最後一個ID的總和。我想我在某個地方犯了一個錯誤。很多thx – 2009-06-18 09:55:43

0

這看起來像來自數據庫,查詢是做這種事情的最佳場所。 (如果這不是來自數據庫的數據,只是忽略這個答案)。

SELECT id, SUM(value) 
FROM YourTable 
-- add your WHERE-constraints here 
GROUP BY id; 
+0

不,這些數據不是來自一個db :( – 2009-06-18 09:56:51

0

Pseduo代碼:

$totals = array(); 

function add($in) 
{ 
    global $totals; 
    if(!isset($totals($in['id'])) 
    { 
     $totals[$in['id']] = $in['value']; 
    }else 
    { 
     $totals[$in['id']] += $in['value']; 
    } 
} 

array_walk('add',$input_array); 

var_dump($totals);