Zusammenfassen (Zählen) von Mehrdimensionalen Arrays

penalizer

Mitglied
Hi Leuds,

ich verzweifel mal wieder an meiner definitiv existierenden Array-Schwäche...
Kleine Frage an Euch. Gibt es eine Funktion mit der man "Klassen" eines Mehrdimensionalen Arrays zusammenfassen und deren Werte addieren kann?
Zum Verständnis:
Habe dieses Array in einer Schleife laufen.

PHP:
$seiten[$i]=array('seite'=>$C->id,'counter'=>$C->counter);

Jedoch möchte ich jede Seite nur einmal haben und die entsprechenden Counter addieren. Für Denkanstöße wäre ich wirklich sehr dankbar.

Gruß Pen.
 
Du hast doch bestimmt ein Array oder irgendeine Datenquelle, wo all deine Seiten herkommen.
Dann mach das ungefähr so:
PHP:
$addierteDaten = array();
foreach($datenquelle as $data)
{
  foreach($seiten as $seite)
  {
     if($seite['seite'] == $data)
     {
        $addierteDaten[$data] += $seite['counter'];
     }
  }
}

Habe den Code jetzt nicht getestet, aber müsste eigentlich gehen.
 
Vielen Dank für deine Antwort,
ich werde das gleich mal ausprobieren.
Denke damit kann ich was anfangen also mach ich hier mal zu ;-)
Bis dann. Gruß Pen.
 
So, habe mich noch mal dran gesetzt und eine Funktion dafür geschrieben. Die erkennt jetzt auch automatisch alle vorhandenen Seiten und gibt dann ein Array aus, in dem der Schlüssel die Seite und der Wert die Gesamtanzahl ist.

Hier der Code:
PHP:
function gesamtSeitenCount($seiten)
{
    $seitenArray = array();
    foreach($seiten as $getsites)
    {
        if(!array_search($getsites['seite'], $seitenArray))
            array_push($seitenArray, $getsites['seite']);
    }

    $addierteDaten = array();
    foreach($seitenArray as $currentSite)
    {  
      foreach($seiten as $seite)
      {
         if($seite['seite'] == $currentSite)
         {
            $addierteDaten[$currentSite] += $seite['counter'];
         }
      }
    }
    return $addierteDaten;
}
Wenn du da jetzt dein $seiten Array rein lädst, also dieser Code:
PHP:
print_r(gesamtSeitenCount($seiten));
Dann erhälst du eine Ausgabe etwa so:
Code:
Array
(
    [blubb] => 1045
    [foobar] => 400
    [test] => 380
    [bla] => 182
)

Ich hoffe das hilft dir weiter!
 
Zurück