PHP Ausgabe und Erweiterung des Arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Ausgabe und Erweiterung des Arrays

    Hallo,

    ich komm einfach nicht weiter bzw. auf das Ergebnis:

    ich habe folgende MySQL Abfrage:

    PHP-Code:
    SELECT YEAR(Tabelle1.datum )  AS year
    MONTH(Tabelle1.datum )  AS month
    count(  *  )  AS count
    FROM Tabelle1
    WHERE Tabelle2
    .id XYZ
    GROUP  BY  MONTH 
    year
    ORDER  BY year

    MONTH  ASC 
    hier meine While Schleife:

    PHP-Code:
    while ($row $sql->db_Fetch(MYSQL_ASSOC))
        {
            
    $output_tmp[] = array('count' => (int)$row[count], 
                                   
    'month' => (int)$row[month], 
                                   
    'year' => (int)$row[year]
                                );
        } 
    So... nun bekomme ich als Beispiel folgendes Ergebnis

    year | month | count
    ---------------------
    2010 | 04 | 82
    2010 | 08 | 92
    2011 | 04 | 13
    2013 | 06 | 185

    okay...

    soo, damit ich das ganze weiter verarbeiten kann, sollte die Ausgabe aber so aussehen, das wenn der monat oder gar das Jahr fehlt, trotzdem weiter gezählt wird bzw. das array erweitert wird bis zum letzten Eintrag, ergo 2013. Der Count soll dabei die Variable Null erhalten.

    ergo sollte das Ergebnis so aussehen:

    Code:
    array(X) { 
                 [XY]=>   array(3) 
                     {  
                        ["count"]=>     int(82)     
                        ["month"]=>     int(4)     
                        ["year"]=>     int(2010)   
                     }   
                [XY]=>   array(3) 
                     {  
                        ["count"]=>     int(0)     <--- Null bei keinem Eintrag
                        ["month"]=>     int(5)     <--- fortlaufender Monat
                        ["year"]=>     int(2010)        <--- fortlaufendes Jahr
                     }
                .....
                [XY]=>   array(3) 
                     {  
                        ["count"]=>     int(185)     
                        ["month"]=>     int(6)     
                        ["year"]=>     int(2013)   
                     }
                .....
    etc.

  • #2
    Hallo,

    in diesem Falle musst du selbst eine Schleife bauen, die vom ersten Monat des Ergebnisses bis zum letzten Monat (des letzten Jahres) durchläuft. Innerhalb des Schleifenkörpers suchst du aus den Datensätzen den heraus, dessen Monat und Jahr mit dem Schleifenzähler übereinstimmt. Gibt es keinen der das tut, gibst du als count 0 aus.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hatte grad nichts besseres zu tun...

      PHP-Code:
      <?php
          
      // unvollständige Liste in $output_tmp, aufsteigend sortiert!
          
      $firstYear $output_tmp[0]["year"];
          
      $firstMonth $output_tmp[0]["month"];
          
      $lastYear $output_tmp[count($output_tmp) - 1]["year"];
          
      $lastMonth $output_tmp[count($output_tmp) - 1]["month"];
          
      $start $firstYear 12 $firstMonth 1;
          
      $end $lastYear 12 $lastMonth 1;
          
      $arrayIndex 0;
          
      $newArray = array();
          for (
      $i $start$i <= $end$i++) {
              
      $currentYear $output_tmp[$arrayIndex]["year"];
              
      $currentMonth $output_tmp[$arrayIndex]["month"];
              
      $currentTime $currentYear 12 $currentMonth 1;
              if (
      $currentTime == $i) {
                  
      $newArray[] = $output_tmp[$arrayIndex];
                  
      $arrayIndex++;
              }
              else {
                  
      $currentYear floor($i 12);
                  
      $currentMonth + ($i 12);
                  
      $newArray[] = array("year" => $currentYear"month" => $currentMonth"count" => 0);
              }
          }
          
      // vollständige Liste ab hier in $newArray
      ?>
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        ja, das habe ich mir auch schon gedacht, aber da klemmt es ja eben.

        hier der Code:
        PHP-Code:
        for ($i 0$i count($output_tmp); $i++) 
            {
                if (isset(
        $output_tmp[$i 1]) && $output_tmp[$i]['year'] + $output_tmp[$i 1]['year']) 
                    {       
                        echo 
        implode(': keine Daten<br />'range($output_tmp[$i]['year'], $output_tmp[$i 1]['year']));
                    }
            } 
        das Ergebnis ist eher ernuchternd, da ich den Fehler in der Schleife für das Jahr nicht finde.

        Ergebnis ist:

        2011: keine Daten <--- hier gibt es doch Daten !! Wieso?
        2012: keine Daten
        2013

        2010 fehlt gänzlich, trotz das Daten vorhanden sind.

        Kommentar


        • #5
          Siehe meinen letzten Beitrag.

          [schlechtlaunigen Kommentar entfernt]
          Zuletzt geändert von AmicaNoctis; 25.11.2010, 12:41.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            so, wieder da.... danke dafür. hmm... es ist noch nicht ganz perfekt, aber ich werde es noch etwas abrunden. okay? hoffe es klappt....

            Kommentar


            • #7
              Hallo,

              leider klappt das nicht so wie ich mir gedacht habe. Das Problem der Weiterverarbeitung des Array's.

              Folgende Sache:

              Das Array ist nun erstellt wie AmicaNoctis es erstellt hat.
              Problem ist, dass das Array doch anders aussehen soll.

              So sieht es z.B. bis jetzt aus, wenn es mit Daten gefüttert wird.
              PHP-Code:
              Array
              (
                  [
              0] => Array
                      (
                          [
              count] => 92
                          
              [month] => 6
                          
              [year] => 2010
                      
              )

                  [
              1] => Array
                      (
                          [
              count] => 30
                          
              [month] => 7
                          
              [year] => 2010
                      
              )

                  [
              2] => Array
                      (
                          [
              year] => 2010
                          
              [month] => 8
                          
              [count] => 0

                      
              )

              Das Problem ist, das es erst im Monat 6 anfängt, es soll aber immer im Monat 1, also Januar des jeweiligen Jahres anfangen und mit dem 12 Monat enden. Ergo soll jedes Jahr, 12 Monate enthalten, egal ob Daten vorhanden sind oder nicht.
              Zuletzt geändert von Nirus2000; 18.12.2010, 12:36.

              Kommentar


              • #8
                okay, war einfacher als ich gedacht habe... bin selber auf die Lösung gekommen.

                Kommentar

                Lädt...
                X