Fünf: - Array nach Jahrzehnten zusammenfassen.

Hallo,

ich möchte aus einem Array das mehrere Jahreszahlen umfasst eine Berechnung erstellen die folgendes Ausgibt

1970 bis 1979 = 2 Eintäge 1980 bis 1989 = 1 Eintrag 1990 bis 1999 = 10 Einträge 2000 bis 2010 = 3 Einträge 2010 bis heute = 1 Eintrag

Die Datenquelle sieht wie folgend aus

$datensatz_aus_xml = array (
array (1971, "Ein wunderschönes Bergdorf"), array (1971, "Leben am Abgrund"), array (1986, "Das Gummitier")

) ...usw.

Ich denke ich muss es in einer Foreach Schleife machen und dann 5 Zähler mitführen. Eine bessere Lösung gibt es wohl nicht oder?

  1. Tach!

    ich möchte aus einem Array das mehrere Jahreszahlen umfasst eine Berechnung erstellen die folgendes Ausgibt Ich denke ich muss es in einer Foreach Schleife machen und dann 5 Zähler mitführen. Eine bessere Lösung gibt es wohl nicht oder?

    Es geht funktional zu lösen. array_count_values() zählt ein Array, das mit array_map() aus dem "Array of Datensatz" in ein "Array of Jahrzehnt" umgeformt wurde. array_map() wird dazu eine anonyme Funktion übergeben, die aus dem Datensatz das Jahrzehnt extrahiert und zurückgibt.

    dedlfix.

    1. Vielen Dank, das hat mir sehr geholfen.

    2. Hakuna matata!

      Es geht funktional zu lösen. array_count_values() zählt ein Array, das mit array_map() aus dem "Array of Datensatz" in ein "Array of Jahrzehnt" umgeformt wurde. array_map() wird dazu eine anonyme Funktion übergeben, die aus dem Datensatz das Jahrzehnt extrahiert und zurückgibt.

      --
      “All right, then, I'll go to hell.” – Huck Finn
      1. Tach!

        Es geht funktional zu lösen. [...]

        Ja, das passiert, dass man Lösungsideen anderenorts wiederverwenden kann. Diesmal aber geht array_columns() nicht zu verwenden.

        dedlfix.

  2. Liebe Fünf,

    $datensatz_aus_xml = array (
    
    >     array (1971, "Ein wunderschönes Bergdorf"),
    >     array (1971, "Leben am Abgrund"),
    >     array (1986, "Das Gummitier")
    > )
    
    

    ...usw.

    finde ich nicht gut und sogar kontraproduktiv! Warum nicht so?

    $datensatz_aus_xml = array (
        1971 => array(
            "Ein wunderschönes Bergdorf",
            "Leben am Abgrund")
        ),
        1986 array (
            "Das Gummitier"
        )
    );
    

    Mir ist jetzt nicht klar, wie Du Deine Daten aus der XML-Datei heraus schnitzt, aber wenn Du diese Array-Struktur verwendest, dann kannst Du folgende Schleife benutzen:

    $str = "";
    
    foreach ($datensatz_aus_xml as $year => $data) {
        $str .= sprintf(
            '%1$d: %2$d Einträge'."\r\n"
            $year,
            count($data)
        );
    }
    
    echo $str;
    

    Du kannst natürlich beim Schnitzen Deines Arrays "$datensatz_aus_xml" auch anders vorgehen und die Jahrzehnte bereits beim Schnitzen zusammenfassen. Um Dir dabei zu raten müsste ich allerdings wissen, wie Du die XML-Daten auswertest...

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)