tabelle <> stammbaum <> geht nicht in meine birne

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

  • tabelle <> stammbaum <> geht nicht in meine birne

    möchte eine tabelle erzeugen, in der abhängig von der anzahl der spalten sich die anzahl der zeilen ändert. wobei in der ersten spalte alle zeilen vertikal verbunden sind, in der zweiten die erste zeile bis zur hälfte und die folgende bis zum schluss vertikal verbunden etc.

    hab schon gesucht, wo anders gepostet (keine antwort) und was von rekursion und nested sets gefunden. ABER DAS IST MIR ZU STRANGE. DAS KAPIER ICH NICHT.
    könnt mir nicht jemand da mal weiterhelfen. mit einem kleinen skriptchen. das wär ein hammer!



    es soll ein stammbaum werden.

    --> erste spalte die eltern
    --> zweite spalte die grosseltern

    etc.

    --> und egal wieviele generationen angezeigt werden sollen, soll die tabelle entsprechend generiert werden...

    3 generationen / 4 zeilen
    4 generationen / 8 zeilen
    5 generationen / 16 zeilen
    6 generationen / 32 zeilen

    usw

    folglich in de

    1. spalte --> 1. zeile rowspan=32
    2. spalte --> 1. zeile rowspan = 16 und auf zeile 17 wieder rowspan = 16


    usw
    mit 4 spalten sollte sie so aussehen;


    <table width="200">
    <tr>
    <td rowspan="8"></td>";
    <td rowspan="4"></td>";
    <td rowspan="2"></td>";
    <td></td>
    </tr>";
    <tr>
    <td></td>
    </tr>
    <tr>
    <td rowspan="2"></td>
    <td></td>
    </tr>
    <tr>
    <td></td>
    </tr>
    <tr>
    <td rowspan="4"></td>
    <td rowspan="2"></td>
    <td></td>
    </tr>
    <tr>
    <td></td>
    </tr>
    <tr>
    <td rowspan="2"></td>
    <td></td>
    </tr>
    <tr>
    <td></td>
    </tr>
    </table>


    danke + schöne grüsse!

  • #2
    schau dir diese Tabelle mal an:
    PHP-Code:
    ID Bez.  | PID
    1  
    UrOpa 0
    2  
    Opa   1
    3  
    Papa  2
    4  
    ich   3
    5  
    Kind  
    wenn du Rekursion kennst, dann ist's easy den Baum zu konstruieren.

    Kommentar


    • #3
      nein. da kenn ich mich eben nicht aus. nicht bei rekursion. nicht bei nested sets. gar nicht. hätts mit 100 krücken probiert. war aber eine schändliche katastrophe.

      please!

      Kommentar


      • #4
        Original geschrieben von noStein
        please!
        dann zeige wo du was nicht versteht, fertige Lösung bekommst du hier nicht.

        Kommentar


        • #5
          meine versuche? ich hab schon einmal gehört, dass ich jämmerlichen programmierstil hab. das weiss ich schon. ich möcht wissen, wie der glorreiche aussieht...

          ich bräuchte ansätze. hilfe wie man das angeht. konkret an meinem beispiel bitte. sonst kapier ich das wie gesagt nicht. das is mir zu heavy. sorry.

          Kommentar


          • #6
            dann lies mal: http://aktuell.de.selfhtml.org/artik...asp/php-forum/ wenn du immer noch nicht verstehst ... tja, vielleicht bist du noch nicht reif genug, um zu proggen

            Kommentar


            • #7
              ich steh drauf. auf selbstgefälliges.


              und das? ist das "proggen"?

              "// Irgendwie eine Einrückung erzielen, zum Beispiel durch wiederholte &nbsp;
              for($i = 0; $i < $aktuelleTiefe; $i++) echo "&nbsp;&nbsp;&nbsp;&nbsp;";


              holymoly! dankeschön.

              Kommentar


              • #8
                Hm ... du willst an einem Bsp. erklärt haben, und ich habe versucht, zu helfen. Naja die Seite ist nicht von mir und der Code somit auch nicht, aber was stört dich daran, es geht nur darum, das Ganze verständlich zu machen, mehr nicht. Aber wie du willst ... schiebe gerne zu trash

                Kommentar


                • #9
                  back2topic

                  du musst erstmal erkennen, dass es um folgen und reihen geht. im prinzip simpel:
                  3 generationen / 4 zeilen
                  4 generationen / 8 zeilen
                  5 generationen / 16 zeilen
                  6 generationen / 32 zeilen
                  7 generationen = 64 reihen, usw. mathematisch ausgedrückt: 2 hoch (generationen-1). damit hast du alles, was du brauchst, um mit 2 schleifen eine tabelle zu erstellen:
                  PHP-Code:
                  <?php
                  $reihen 
                  6;
                  $spalten pow(2,$reihen-1);
                  $zaehler 1;
                  echo 
                  '<table border=1>';
                  for(
                  $i=0$i<$reihen$i++)
                  {
                      echo 
                  '<tr>';
                      for(
                  $k=0$k<$spalten$k++)
                      {
                          echo 
                  '<td colspan="'.pow(2,$reihen-$i-1).'">'.$zaehler.'</td>';
                          
                  $zaehler++;
                      }
                      echo 
                  '<tr>';
                  }
                  echo 
                  '</table>';
                  ?>
                  fehlerbehandlung usw. musst du selber einfügen, sollte dich als ansatz aber weiterbringen.
                  Kissolino.com

                  Kommentar


                  • #10
                    DANKE!

                    D A N K E !

                    Kommentar


                    • #11
                      Original geschrieben von Wurzel

                      du musst erstmal erkennen, dass es um folgen und reihen geht. im prinzip simpel:7 generationen = 64 reihen, usw. mathematisch ausgedrückt: 2 hoch (generationen-1).
                      sorry. aber ich bin wieder lästig. hab mich redlich bemüht. auf obiges ergebnis bin ich zuvor durch folgendes gekommen:
                      $zeilenAlt=1;
                      for ($i=1; $i<$generationen; $i++) {
                      $zeilenAlt = $zeilenAlt*2;
                      ${"spalte_".$i} = $zeilenAlt;
                      echo "spalte ".$i.": ".${"spalte_".$i}." Zeilen<BR>";
                      }

                      umständlicher. ich weiss. aber dann hab ich für jede spalte eine variable mit der richtigen anzahl zeilen. NUR ich komme in keiner weise (auch nicht mit deinem script) auf diese tabelle:

                      <table width="400" border="1" cellspacing="2" cellpadding="0">
                      <tr>
                      <td rowspan="16">1</td>
                      <td rowspan="8">2</td>
                      <td rowspan="4">4</td>
                      <td rowspan="2">8</td>
                      <td rowspan="1">16</td>
                      </tr>
                      <tr>
                      <td rowspan="1">17</td>
                      </tr>
                      <tr>
                      <td rowspan="2">9</td>
                      <td rowspan="1">18</td>
                      </tr>
                      <tr>
                      <td rowspan="1">19</td>
                      </tr>
                      <tr>
                      <td rowspan="4">5</td>
                      <td rowspan="2">10</td>
                      <td rowspan="1">20</td>
                      </tr>
                      <tr>
                      <td rowspan="1">21</td>
                      </tr>
                      <tr>
                      <td rowspan="2">11</td>
                      <td rowspan="1">22</td>
                      </tr>
                      <tr>
                      <td rowspan="1">23</td>
                      </tr>
                      <tr>
                      <td rowspan="8">3</td>
                      <td rowspan="4">6</td>
                      <td rowspan="2">12</td>
                      <td rowspan="1">24</td>
                      </tr>
                      <tr>
                      <td rowspan="1">25</td>
                      </tr>
                      <tr>
                      <td rowspan="2">13</td>
                      <td rowspan="1">26</td>
                      </tr>
                      <tr>
                      <td rowspan="1">27</td>
                      </tr>
                      <tr>
                      <td rowspan="4">7</td>
                      <td rowspan="2">14</td>
                      <td rowspan="1">28</td>
                      </tr>
                      <tr>
                      <td rowspan="1">29</td>
                      </tr>
                      <tr>
                      <td rowspan="2">15</td>
                      <td rowspan="1">30</td>
                      </tr>
                      <tr>
                      <td rowspan="1">31</td>
                      </tr>
                      </table>


                      ich seh die reglmässigkeit nicht. wann rowspan? wann tr? da hauts mich us den schuhen. bitte nochmal um hilfe...
                      Zuletzt geändert von noStein; 09.11.2004, 21:09.

                      Kommentar


                      • #12
                        zähl mal die anzahl der td's:

                        Code:
                        16 zeilen:      8 zeilen
                        [B]5[/B]               [B]4[/B]     
                        1               1
                        2               2
                        1               1
                        3               
                        1               [B]4[/B]
                        2               1
                        1               2
                                        1
                        [B]4[/B]
                        1
                        2
                        1
                        3
                        1
                        2
                        1
                        was fällt dir auf? folgen und reihen!

                        gut, bring das jetzt in beziehung zu den rowspans. welcher systematik folgen die? wenn du das hast, kannst du einen algorithmus finden, der die bedingungen erfüllt wenn du eine bestimmte tiefe angibst. allerdings ist das nun etwas kniffeliger, als von oben nach unten das ganze aufzubauen
                        Kissolino.com

                        Kommentar


                        • #13
                          holymoly! das is ja eine harte nuss:

                          --> 2 generationen : 2zeilen
                          --> 3 generationen : 2*2zeilen
                          --> 4 generationen : 2*2*2zeilen
                          --> 5 generationen : 2*2*2*2zeilen
                          usw.

                          abfolge der tds:
                          --> 2 generationen: 2 : 1
                          --> 3 generationen: 3 : 1 : 2 : 1
                          --> 4 generationen: 4 : 1 : 2 : 1 : 3 : 1 : 2 : 1
                          --> 5 generationen: 5 : 1 : 2 : 1 : 3 : 1 : 2 : 1 : 4 : 1 : 2 : 1 : 3 : 1 : 2 : 1

                          das heisst:
                          1) erstes <tr> anzahl td = generationen
                          2) folgende <tr>: wie oft insgesamt die abfolge 1 : 2 : 1? --> anzahlZeilen/4
                          --> muss eine ganzeZahl >= 1 sein
                          --> ist wert < 1, dann nur der erste Teil der Abfolge (also 1)
                          3) und zwischen dieser Abfolge: wie oft? folgende Abfolge: 3 : 4 : 3 --> anzahlZeilen/4/4
                          --> muss eine ganzeZahl >= 1 sein
                          --> ist wert < 1, dann nur der erste Teil der Abfolge (also 3)
                          4) und zwischen dieser Abfolge: wie oft? folgende Abfolge: 5 : 6 : 5 --> anzahlZeilen/4/4/4
                          --> muss eine ganzeZahl >= 1 sein
                          --> ist wert < 1, dann nur der erste Teil der Abfolge (also 5)
                          usw.


                          so. und die werte für rowspan stehen in direktem verhältnis zu diesen zahlen:
                          --> 1 td --> 1
                          --> 2 tds --> 2 : 1
                          --> 3 tds --> 4 : 2 : 1
                          --> 4 tds --> 8 : 4 : 2 : 1

                          das heisst: beispiel 4 tds -->
                          1. rowspan = anzahlZeilen bei 4 Generationen = 8
                          2. rowspan = anzahlZeilen bei 3 Generationen = 4
                          3. rowspan = anzahlZeilen bei 2 Generationen = 2
                          4. rowspan = anzahlZeilen bei 1 Generationen = 1

                          also for-schleife (die krieg ich hin)

                          ABER die abfolge oben? zusammenhänge sind soweite klar. aber in einer for-schleife? da weiss ich absolut nicht wie. da krieg ich doch eine unmenge if-else-abfragen...

                          Kommentar


                          • #14
                            Original geschrieben von noStein
                            da krieg ich doch eine unmenge if-else-abfragen...
                            ... denk mal um die ecke.

                            du hast eine regel
                            - für die zeilen
                            - für die tds
                            - für die rowspans

                            bau dir im ersten schritt ein mehrdimensionales array, dass die zahlen beinhaltet ... zB => array(rows => array(tds, rowspans), rows => array(tds, rowspans), ...)

                            das kannst du in 2 verschachtelten for-schleifen abarbeiten. habs nicht getestet, sollte aber so gehen
                            Kissolino.com

                            Kommentar


                            • #15
                              verstehe ich das richtig: ich kann das sowieso nicht auf unbeschränkte anzahl generationen machen? ich definier z.b. bis 10 generationen wie die abfolge ist und das lege ich in einem array ab??? oder hab ich dich da falsch verstanden?

                              Kommentar

                              Lädt...
                              X