2009-06-18 9 views
0

Je dois additionner des tableaux (un tableau de tableaux). La structure de mes tableaux est comme ceci:sum arrays

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

Je sais que j'ai des tableaux N comme avant. Je dois additionner ceux avec le même id.

une idée?

Exemple:
**

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

**

Répondre

2

Je ne suis pas tout à fait sûr de ce que vous essayez de faire - je suppose que vous voulez la somme groupée par l'identifiant pour chaque identifiant distinct, mais je peux me tromper.

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

vous avez pris droit, mais je reçois seulement la somme du dernier id. Je pense que je fais une erreur quelque part. beaucoup de thx –

0

Cela semble provenir d'une base de données, et la requête est le meilleur endroit pour faire de telles choses. (si ce n'est pas une donnée d'un db, ignorez simplement cette réponse).

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

non, ces données ne viennent pas d'un db :( –

0

pseduo-code:

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