2009-06-18 18 views
0

私はいくつかの配列(配列の配列)を合計する必要があります。私の配列の構造は次のようになります:合計配列

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 –

0

これはデータベースから来ているように見えますが、クエリはそのようなことを行うのに最適な場所です。 (これがdbのデータでない場合は、この回答を無視してください)。

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

いいえ、それらのデータはdbから来ていません:( –

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