2009-06-18 72 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);