Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei unterschiedliche mehrdimensionale Arrays verknüpfen

Einklappen

Neue Werbung 2019

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

  • Zwei unterschiedliche mehrdimensionale Arrays verknüpfen

    Hallo Allerseits!

    Ich habe ein Problem, an dem ich zu verzweifeln drohe
    ich bekomme von einer DB ein result-array mit mehreren Elementen der Form:

    PHP-Code:
    $result[] ist das result-set von der DB.

    array(
    5) {
      [
    0]=>
      array(
    12) {
        [
    "blog_id"]=> string(12"1_1241522012"
        
    ["blog_date"]=> string(19"2009-05-04 14:39:00"
        
    ["blog_title"]=> string(10"3. Versuch"
        
    ["blog_text"]=> string(29"xaxsasx xaxaaxaxa axaxaxxasas"
        
    ["blog_url"]=> string(11"www.bla.de"
        
    ["blog_image"]=> string(17"http://www.bla.de/testaaaaaaa.jpg"
        
    ["blog_uploadImage"]=> string(70"http://www.bla.de/1241440740.jpg"
        
    ["blog_track"]=> string(66"http://www.bla.de/Zooloo.mp3"
        
    ["blog_flickr"]=> string(9"123455672"
        
    ["blog_youtube"]=> string(10"v842343248"
        
    ["blog_vimeo"]=> string(7"4634373"
        
    ["blog_type"]=> string(0"4"
      
    }
    ... 
    Dieses Array soll in ein Array der Form:

    PHP-Code:
    $flashArray[] das neuedas zusammengebaut werden soll...

    array(
    2) {
      [
    "years"]=>
      array(
    1) {
        [
    1]=>string(4"2009"
      
    }
      [
    "months"]=>
      array(
    1) {
        [
    1]=>
        array(
    3) {
          [
    0]=> string(2"05"
          
    [1]=> string(2"03"
          
    [2]=> string(2"01"
        
    }
      }

    verknüpft werden, und zwar so dass die einzelnen Elemente jeweils in die richtige Ebene des neuen Array "rutschen"... Also ein Eintrag vom März 2009 würde dann unter [2009][03] zu finden sein.

    Wie gehe ich da am besten vor??? Ich habe mit verschachtelten foreach-schleifen rumprobiert, allerdings nicht das geschafft, was ich wollte...

    PHP-Code:
    $i 0;
    $j 0;

    foreach(
    $result as $key => $value) {
                    
        foreach (
    $flashArray as $key => $value) {
            
            if ( 
    in_array(date("Y"strtotime($result[$j]['blog_date'])), $years) && in_array(date("m"strtotime($result[$j]['blog_date'])), $months) ) {    
                    
    $flashArray['months'][$i][$j] = array($value => array());
                    
    array_push($flashArray['months'][$i][$j], $result[$i]);
            }
        }

    $years und $months sind hier 2 Hilfsarrays, die vorher erstellt werden ; eins mit den Jahren, eins mit den Monaten, an denen Einträge vorhanden sind.

    Hilfe!
    Gracias...

  • #2
    DU brauchst nur eine Schleife, die Result durchläuft
    Dann Zugriff auf
    Code:
    $result[$key]['blog_date']
    , Umwandlung vornehmen und in neues Array schreiben
    PHP-Code:
    $neu['years'][$key] = ...;
    $neu['months'][$key] = array (...); 

    Kommentar


    • #3
      Ich vermute allerdings, dass du die Daten auch schon so aus der DB holen könntest.

      Kommentar


      • #4
        Danke für dein Feedback Nikosch!

        Aber müsste es dann nicht eher:

        PHP-Code:
        foreach ($result as $key => $value) {
                            
                        
        $flashArray['years'][$key] = $result[$key]['blog_date_year'];
                        
        $flashArray['years']['months'][$key] = $result[$key]['blog_date_month'];
                        
        $flashArray['years']['months']['entry'][$key] = array($result[$key]);    
                    } 
        oder ähnlich heissen, denn die Struktur soll ja verschachtelt sein:

        PHP-Code:
        Jahr
           
        Monat
              
        Eintrag
        Jahr
           
        Monat
              
        Eintrag
              
        Eintrag
           
        Monat
              
        Eintrag
              
        Eintrag
              
        Eintrag 
        so ganz klappt das noch nicht

        Kommentar


        • #5
          @ lazydog

          ja, das dachte ich auch... aber ich habe keinerlei Funktionalität bei der MySQL-DB gefunden, die mir solch ein strukturiertes Array zurückgibt...
          Du ne Idee?

          Kommentar


          • #6
            Ähm also, oben steht nichts von [years][months]:
            Code:
            array(2) {
              ["years"]=>
              array(1) {
                [1]=>string(4) "2009"
              }
              ["months"]=>
              array(1) {
                [1]=>
                array(3) {
                  [0]=> string(2) "05"
                  [1]=> string(2) "03"
                  [2]=> string(2) "01"
                }
              }
            }
            dass du die Daten auch schon so aus der DB holen könntest.
            Zmindest die Trennung Jahr und Monatsteile ginge. Auch kannst Du die Struktur schon beim Fetching zusammenstellen. Schlieslich stellt sich noch die Frage, ob die ganzen anderen verworfenen Daten überhaupt ausgelesen werden müssen.
            Verschachtelte Arrays kann man natürlich nicht nativ erzeugen, SQL liefert ja eine flache Datenstruktur.

            Kommentar


            • #7
              stimmt, mein Fehler sorry...
              Also doch 2 foreach-Schleifen nötig um die später genannte Struktur zu erzeugen?

              Kommentar


              • #8
                Also solls jetzt so wie in #4 aussehen, ja?

                Dann überleg mal, dass dies Unsinn ist:
                $flashArray['years'][$key] = $result[$key]['blog_date_year'];
                $flashArray['years']['months'][$key] = $result[$key]['blog_date_month'];
                $flashArray['years']['months']['entry'][$key] = array($result[$key]);
                Richtig wäre doch:
                PHP-Code:
                $flashArray[$year][$month]['entry'] = array($entry); 
                Jahr und Monat sind dann schon als Schlüssel vorhanden, müssen also nicht noch einmal zugewieden werden (Wohin auch…).

                Kommentar


                • #9
                  Ehrlich gesagt, verwirrt mich das...
                  $year und $month kennt er nicht als array-indices und auch $entry ist nicht bekannt...
                  und warum war das obige Unsinn?

                  ich habe nun folgenden Code:

                  PHP-Code:
                      foreach ($result as $key => $value) {
                                      
                                  
                  $flashArray['years'][$key] = $result[$key]['blog_date_year'];
                                  
                  $flashArray['years']['months'][$key] = $result[$key]['blog_date_month'];
                                  
                                  if (
                  $result[$key]['blog_date_year'] == $flashArray['years'][$key] && $result[$key]['blog_date_month'] == $flashArray['years']['months'][$key]) {
                                      
                  $flashArray['years']['months']['entry'] = array($value);
                                  }    
                                  else {
                                      
                  next($result);
                                  }
                              } 
                  Die Ausgabe:

                  Code:
                  array(1) {
                    ["years"]=>
                    array(6) {
                      [0]=>
                      string(4) "2009"
                      ["months"]=>
                      array(6) {
                        [0]=>
                        string(2) "05"
                        ["entry"]=>
                        array(1) {
                          [0]=>
                          array(27) {
                            ["blog_id"]=> string(2) "56"
                            ["blog_date"]=> string(19) "2008-03-26 23:50:47"
                            ["blog_title"]=> string(16) "1800 Zeilen Code"
                            ["blog_text"]=> string(43) "... in 3 Tagen verteilt auf 11 AS Dateien."
                            ["blog_url"]=> NULL
                            ["blog_image"]=> NULL
                            ["blog_uploadImage"]=> NULL
                            ["blog_track"]=> NULL
                            ["blog_flickr"]=> NULL
                            ["blog_youtube"]=> NULL
                            ["blog_vimeo"]=> NULL
                            ["blog_type"]=> string(1) "1"
                            ["blog_date_year"]=> string(4) "2008"
                            ["blog_date_month"]=> string(2) "03"
                          }
                        }
                        [1]=>
                        string(2) "05"
                        [2]=>
                        string(2) "05"
                        [3]=>
                        string(2) "01"
                        [4]=>
                        string(2) "03"
                      }
                      [1]=>
                      string(4) "2009"
                      [2]=>
                      string(4) "2009"
                      [3]=>
                      string(4) "2009"
                      [4]=>
                      string(4) "2008"
                    }
                  }
                  Der Anfang sieht schon ganz gut aus... aber leider nur der Anfang.
                  Probleme bereitet weiterhin die richtige Zuordnung...
                  ich weiß nicht, ob mein Ansatz mit "if" zum Erfolg führen kann.

                  any ideas?
                  danke

                  Kommentar


                  • #10
                    Sieht gut aus? Du machst das:
                    Code:
                    array {
                      years => array {
                                 0      => "2009"
                                 months => array {
                                             0     => "05"
                                             entry => array {
                                                        0 => ...
                                                        1 => ...
                                                        }
                                             }
                                  }
                      }
                    Ich dachte, Du willst das:
                    Code:
                    array {
                      2009 => array {
                                 05 => array {
                                         0 => ...
                                         1 => ...
                                         }
                               }
                      }

                    Kommentar


                    • #11
                      Ja, genau so soll es aussehen!
                      argh...

                      Kommentar


                      • #12
                        Dann siehe #8.
                        $year etc. musst Du aus den *_fetch-Daten ermitteln, Du kannst nat®lich auch direkt das Array und den Schlüssel verwenden.

                        Feinheit: Der Code in #8 wird Notices "werfen", weil das Unter-Array für jedes Jahr/Monat anfangs immer nicht definiert ist. Wenn Du die grundlegende Zuordnung hinbekommen hast, kúmmern wir uns darum mit isset ()…

                        Kommentar


                        • #13
                          Du kannst dir gar nicht vorstellen, wie sehr du mir grade hilfst! danke...

                          ich habe nun folgenden Code:

                          PHP-Code:
                          foreach ($result as $key => $value) {
                                              
                              
                          $year $result[$key]['blog_date_year'];
                              
                          $month $result[$key]['blog_date_month'];
                              
                              if (
                          $result[$key]['blog_date_year'] == $year && $result[$key]['blog_date_month'] == $month) {
                                  
                          $flashArray[$year][$month][$key] = $result[$key];  
                              }
                              else {
                                  return 
                          false;
                              }

                          diesmal stimmt die Aussage: sieht gut aus
                          die Zuordnung stimmt und auch das Array ist genauso aufgebaut, wie erwünscht.

                          Scheint zu funktionieren! Ich werde mal noch ein bisschen testen...
                          Übrigens habe ich bisher keine Notices erhalten. (ja, error_reporting zeigt mir auch Notices...)

                          Quantor...

                          Kommentar


                          • #14
                            Übrigens habe ich bisher keine Notices erhalten. (ja, error_reporting zeigt mir auch Notices...)
                            Naja, genau das meine ich ja. Besser Du kümmerst Dich noch darum:
                            PHP-Code:
                            if (false == isset ($flashArray[$year])) {
                              
                            $flashArray[$year] = array ();
                              }

                            if (
                            false == isset ($flashArray[$year][$month])) {
                              
                            $flashArray[$year][$month] = array ();
                              } 

                            Kommentar

                            Lädt...
                            X