Frage

Ich muss einige Arrays zusammenzufassen (ein Array von Arrays). Die Struktur meiner Arrays ist wie folgt:

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

Ich weiß, dass ich N-Arrays wie die zuvor. Ich brauche solche mit der gleichen ID zu summieren.

irgendeine Idee?

Beispiel:
**

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

**

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, was Sie zu tun versuchen - ich nehme an, Sie die Summe durch die ID für jede einzelne ID gruppiert werden sollen, aber ich kann falsch sein

.
<?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
)
*/

Andere Tipps

Das sieht aus wie es aus einer Datenbank kommt, und die Abfrage ist der beste Ort, um solche Dinge zu tun. (Wenn diese nicht Daten von einem db ist, ignorieren Sie diese Antwort).

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

Pseudo-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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top