mehrdimensionales Array aufbröseln

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

  • mehrdimensionales Array aufbröseln

    Hi,
    wusste nicht so rechts wie mein Vorhaben nennen soll,
    versuche zur Zeit folgendes, ich hab ein mehrdimensionales array und will daraus einen Tooltip bauen.

    Dabei stoß ich auf ein total banales Index-Problem, das ich zur Zeit nicht weg bekomme.
    Ich brauche je die Keys des letzten Arrays in der Stufe und die Werte dazu.
    Die Anzahl der Dimensionen unterscheidet sich.

    Bsp-Array:
    Code:
    $in_array =
    Array ( [Konten] => Array ( [2] => Array ( [Kontonr]  => 999999
                                               [KontoBez] => BAR
                                               [Saldo] => 0,00€ )
                                [1] => Array ( [Kontonr]  => 1630
                                               [KontoBez] => Privat
                                               [Saldo] => 0,00€ )
                                [4] => Array ( [Kontonr]  => 3733
                                               [KontoBez] => Privat
                                               [Saldo] => 0,00€ )
                               )
            [Vorschau] => Array ( [0] => Array ( [Vorschau] => Endsaldo
                                                 [Wert]     => 0,00€ )
                                  [1] => Array ( [Vorschau] => Restausgabe
                                                 [Wert]     => 0,00€ )
                                  [2] => Array ( [Vorschau] => Offene Ausgabe
                                                 [Wert]     => 0,00€ )
                                  [3] => Array ( [Vorschau] => Manuell
                                                 [Wert]     => 0,00€ )
                                )
          )
    Die Tabelle des ersten Arrays soll so aussehen:
    Code:
    Kontonr Kontobez Saldo
    -----------------------
    999999  Bar         0,00€
    1630     Privat      0,00€
    3733     Privat      0,00€
    ....
    Das gleiche quasi für das 2te Array in dem übergebenen Array.


    Jetzt war mein Ansatz mal (quit&dirty):

    PHP-Code:
         foreach($in_array as $array_tooltip_loop1)
         {
    //     if(!is_array($array_tooltip_loop1[0]))   {   $array_tooltip_loop1 = array($in_array);   }

         
    while(is_array($array_tooltip_loop1[1]))  //////// hier der Index macht Probleme, es gibt nicht immer eine 1
         
    {
            foreach(
    $array_tooltip_loop1 as $array_tooltip_loop1)
            { 
    null; }
    //        print_r($array_tooltip_loop1);
    //        protokoll_trace(__FILE__,__FUNCTION__,null,'in while',$string);
         
    }
         }


    //     print_r($array_tooltip_loop1); 

         
    foreach(array_keys($array_tooltip_loop1) as $string_SpaltenBez)
         {
            
    $string $string."<th align='left'>$string_SpaltenBez</th>";
         } 
    Das klappt eig so ziemlich, nur macht die fett-markierte 1 mit Probleme, weil es nicht immer einen Index mit 1 gibt in dem jeweiligen Array.....

    Jemand ne Idee?
    Bin für alles offen, natürlich auch, wenns viel einfacher geht..
    Zuletzt geändert von Normansmily; 22.02.2011, 18:53.

  • #2
    Hallo,

    bei deiner chaotischen Code-Baustelle seh ich nicht ganz durch, aber es sieht so aus, als wäre die untere foreach-Schleife außerhalb der anderen. Dann würdest du nur den letzten Eintrag des Haupt-Arrays bekommen. Aber egal, wirf den Code nochmal weg und fang ganz normal mit zwei verschachtelten foreach-Schleifen an:

    PHP-Code:
    foreach ($in_array as $k1 => $v1) { // $kX und $vX sinnvoll umbenennen
        
    $headersWritten false;
        foreach (
    $v1 as $k2 => $v2) {
            if (!
    $headersWritten) {
                echo 
    "..."// Überschriften schreiben
                
    $headersWritten true;
            }
            echo 
    "..."// Zellen einer Zeile schreiben
        
    }

    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
      Ich verstehe dein Problem nicht so wirklich.
      Wenn es keinen fortlaufenden nummerischen Index gibt - dann greife halt nicht über einen solchen zu!

      Auch mehrere Array-Ebenen lassen sich mit verschachtelten foreach-Schleifen problemlos durchlaufen, ohne das man die Keys der Arrays kennen muss.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Gerne räum ich den Code mal etwas auf, denke der Ansatz ansich war net verkehrt.
        Das Problem an mehreren foreach Schleifen ist, da ich vorher die Tiefe des Array nicht kenne wäre das nie 100%ig.

        Ohne numerischen Index hatte ich auch schon versucht zuzugreifen, dann gehter allerdings in die while-schleife nicht mehr rein.


        Mal etwas sauberer:
        PHP-Code:
             foreach($in_array as $array_tooltip_loop1)
             {

                while(
        is_array($array_tooltip_loop1[1]))  //////// hier der Index macht Probleme, es gibt nicht immer eine 1
                
        {
                   foreach(
        $array_tooltip_loop1 as $array_tooltip_loop1)
                   { 
        null; }
                }
              }

             foreach(
        array_keys($array_tooltip_loop1) as $string_SpaltenBez)
             {
                
        $string $string."<th align='left'>$string_SpaltenBez</th>";
             } 

        Kommentar


        • #5
          Zitat von Normansmily Beitrag anzeigen
          Das Problem an mehreren foreach Schleifen ist, da ich vorher die Tiefe des Array nicht kenne wäre das nie 100%ig.
          Was heißt das konkret, dass du die Tiefe nicht kennst?

          Das gezeigte Format sieht relativ statisch aus.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Für das mit dem numerischen Index hab ich dir ja schon eine Lösung gepostet. Wenn die Tiefe nicht bekannt ist, musst du das ganze in eine rekursive Funktion packen, in der du erstmal ermittelst, ob du schon auf der richtigen Ebene angekommen bist und dann das machen, was ich gepostet habe.
            [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


            • #7
              Das bedeutet, das $in_array könnte auch so aussehen:

              Code:
              $in_array = Array ( [Kontonr]   => 999999
                                  [KontoBez] => BAR
                                  [Endsaldo]  => 0,00€ )
              Der Knackpunkt ist, dass mich immernur das letzte Array interessiert.
              Wenn ich das zur Verfügung habe ist der Rest eigentlich ganz leicht...

              Kommentar


              • #8
                Keiner ne Idee?

                Kommentar


                • #9
                  Das letzte Arrayelement bekommst du mit end(). Hilft dir das vielleicht weiter?
                  Sonst musst du dein Ziel mal so beschreiben, dass man es nachvollziehen kann. Im Moment bin ich nämlich nicht sicher, ob ich dich richtig verstehe.

                  Kommentar


                  • #10
                    Zitat von Normansmily Beitrag anzeigen
                    Keiner ne Idee?
                    Wieviele Ideen brauchst du noch? Vielleicht solltest du erstmal auf die eingehen, die du schon bekommen hast und warum die dir nicht reichen bzw. was dich an denen stört.
                    [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


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      Wieviele Ideen brauchst du noch? Vielleicht solltest du erstmal auf die eingehen, die du schon bekommen hast und warum die dir nicht reichen bzw. was dich an denen stört.
                      Wenns die entscheidende wäre, dann nur eine.... die kam nur leider nicht....

                      .... wie auch immer, war am 23.02. abends auf Geschäftsreise un hab das nochmal neu aufgesetzt.... klappte dann am selben abend noch....

                      Falls sowas mal jemand versucht, hier meine Function zur Unterstützung:

                      PHP-Code:
                        function show_tooltip_array($in_css_class,$in_css_spanclass,$in_showwert,$in_array_text,$in_array_tooltip,$in_table_border)
                        {

                           
                      $kon_show_tooltip get_konstante_session('SHOW_TOOLTIP');


                           
                      // Berechtigung & Ausstieg prüfen
                           
                      if(nvl(strtoupper($kon_show_tooltip),' ') == 'OFF')      {   return $in_showwert;   }
                           if(!
                      is_array($in_array_tooltip))    {   return $in_showwert;   }

                           
                      $in_array_tooltip array_values($in_array_tooltip);
                           if(
                      is_null($in_array_tooltip[0]))   {   return $in_showwert;   }
                           
                           
                      // Defaults
                           
                      if(is_null($in_css_class))        {   $in_css_class     'tooltip';   }
                           if(
                      is_null($in_css_spanclass))    {   $in_css_spanclass 'info';      }
                           
                      $i_Tabelle    0;
                           
                      $i_Text       0;
                           
                      $i_TH         0;


                           
                      // String basteln
                           
                      $string " <a href='#hint' class='$in_css_class'> <span class='$in_css_spanclass'> ";

                           foreach(
                      $in_array_tooltip as $array_tooltip_TabLoop)
                           {
                              
                      $array_sic             $in_array_tooltip;
                              
                      $array_tooltip_TabLoop array_values($array_tooltip_TabLoop);

                              if(!
                      is_array($array_tooltip_TabLoop))   {   $array_tooltip_TabLoop = array($array_tooltip_TabLoop);   }

                              while(
                      is_array($array_tooltip_TabLoop[0]))
                              {
                                 
                      $array_sic           $array_tooltip_TabLoop;

                                 
                      $array_tooltip_TabLoop $array_tooltip_TabLoop[0];
                                 
                      $array_tooltip_TabLoop array_values($array_tooltip_TabLoop);
                              }


                              
                      $i_Tabelle++;

                              if(
                      $i_Tabelle 1)   {   $string $string." <br /><br /> ";   }

                              
                      $string $string." <table border='$in_table_border' align='left'>
                                                  <tr> "
                      ;

                              foreach(
                      $array_sic as $array_SpaltenBez)
                              {
                                 
                      $i_TH++;
                                 if(
                      $i_TH == 1)
                                 {
                                    foreach(
                      array_keys($array_SpaltenBez) as $string_SpaltenBez)
                                    {
                                       
                      $string $string."<th align='left'>$string_SpaltenBez</th>";
                                    }
                                 }
                              }

                              
                      $string $string."</tr>";

                              foreach(
                      $array_sic as $array_Zeilen)
                              {
                                 
                      $string $string."<tr>";

                                 foreach(
                      $array_Zeilen as $array_ZeilenBez)
                                 {
                                    
                      $string $string."<td text-align='right' !important>$array_ZeilenBez</td>";
                                 }

                                 
                      $string $string."</tr>";
                              }

                              
                      $i_TH 0;
                              if(
                      count($in_array_tooltip) > $i_Tabelle && !empty($array_Loop1[$i_Tabelle]))   {   $string $string." <tr><td>&nbsp;</td></tr> ";   }
                              
                      $string $string."</table>";
                           }

                           
                      $string $string."</span>$in_showwert</a>";

                          return 
                      $string;
                        } 
                      Der Trick lag dabei im $array_sic, einfach das letzte vor dem letzten loop zu merken.
                      Zuletzt geändert von Normansmily; 03.03.2011, 17:59.

                      Kommentar

                      Lädt...
                      X