[PHP] Baumstruktur aufteile in Tabellen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von ronny130286, 11. März 2010 .

Schlagworte:
  1. 11. März 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Baumstruktur aufteile in Tabellen

    Hi

    ich habe mir einem Baustruktur programmiert die in einer Liste (Menü) ausgegeben wird

    Code:
    <?php
    
    function gib_baumstruktur($kategorie,$pid=null){
     echo '<ul>';
     foreach($kategorie as $key=>$value){
     if($value['pid']===$pid){
     echo '<li>',
     $value['name'];
     gib_baumstruktur($kategorie,$value['id']);
     echo '</li>';
     }
     }
     echo '</ul>';
    }
    
    $resource=mysql_query("SELECT * FROM ".$tabelle['liste'].""); 
    $kategorie = array();
    
    while($row = mysql_fetch_assoc($resource)){
     $kategorie[$row['id']] = $row; 
    } 
    
    gib_baumstruktur($kategorie); 
    ?>
    nun wollte ich das er mir jede liste seperatiert und einen Spalte einer Tabelle schreibt nach 3 Spalten soll er dann einen Zeile anfügen:
    Schema
    Bild

    wie kann ich das realisieren?
    habe schon alles mögliche probiert aber irgendwie will es einfach nicht klappen
     
  2. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    das geht im grunde ganz einfach, in deinem fall aber ein wenig verzwickt:

    PHP:
    <? php

    function  gib_baumstruktur (& $kategorie $cols $pid  null $ncol  true ) {
        
    $array  array_filter ( $kategorie , function( $var ) use( $pid ) { return  $var  ==  $pid ; });
        if((
    $c  count ( $array )) ==  0 )
            goto 
    next_pid ;
            
        if(
    $ncol  ===  true ) {
            if(++
    $cols  ===  3 ) {
                print 
    '<tr></tr>' ;
                
    $cols  1 ;
            }
        
            print 
    '<td>' ;
        }
        
        print 
    '<ul>' ;
        
        for(
    $i  0 $i  $c ; ++ i ) {
            print 
    '<li>'  $array [ $i ][ 'name' ] .  '</li>' ;
            unset(
    $kategorie [ $array [ $i ][ 'pid' ]]);
            
    gib_baumstruktur ( $kategorie $cols $array [ $i ][ 'pid' ],  false );
        }
        
        print 
    '</ul>' ;
        
        if(
    $ncol  ===  true ) print  '</td>' ;
        
        
    next_pid :
        if(
    count ( $kategorie ))
            
    gib_baumstruktur ( $kategorie $cols , ++ $pid true );
    }


    //dein query
    $resource  mysql_query ( "SELECT * FROM " . $tabelle [ 'liste' ]. "" );

    while(
    $row  mysql_fetch_assoc ( $resource ))
        
    $kategorie [ $row [ 'id' ]] =  $row ;

    //tablellen-kopf
    print  '<table cellpadding="0" cellspacing="0"><thead><tr>' ;

    gib_baumstruktur ( $kategorie 0 );

    //tabellen-ende
    print  '</tr></tbody></table>' ;
     
  3. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    danke erstmal für die schnelle antwort

    habe das ganz mal getestet un bekommen diesen fehler
    Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM in C:\Users\Ronny Matthei\xampp\htdocs\abrechnung\test.php on line 19

    @EDIT:

    habe den kleinen fehler gefunden (in der for-schleife fehlt beim ++$i das $)
    aber habe jetzt einen ganz anderes Probleme unzwar läd sich die seite jetzt tode

    nach 1min kommt dann Fatal error: Maximum execution time of 60 seconds exceeded in C:\Users\Ronny Matthei\xampp\htdocs\abrechnung\test.php on line 4
     
  4. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    mach mal um das array_filter noch array_values()
     
  5. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    okay habe ich gemacht, ergab aber keinen änderung

    sollte ich mich für die realisierung vielleicht nicht auf der rekursive funktion versteifen und lieben Nested Sets nutzen?
     
  6. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    PHP:
    unset( $kategorie [ $array [ $i ][ 'pid' ]]);
    ändern in:
    PHP:
    unset( $kategorie [ $array [ $i ][ 'id' ]]);
    und weiter unten
    PHP:
    gib_baumstruktur ( $kategorie 0 );
    ändern in:
    PHP:
    gib_baumstruktur ( $kategorie 0 1 );
    bez. nested sets: davon rate ich ab. mit der rekursiven funktion bist du schneller!
     
  7. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    ergab auch keinen änderung

    er scheint defintiv in zeile 4 hängen zu bleiben
    so sieht zeile 4 aus
    PHP:
    $array  array_values ( array_filter ( $kategorie , function( $var ) use( $pid ) { return  $var  ==  $pid ; }));
     
  8. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    ah, das muss natürlich so sein:
    PHP:
    $array  array_values ( array_filter ( $kategorie , function( $var ) use( $pid ) { return  $var [ 'id' ] ==  $pid ; }));
     
  9. 11. März 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Baumstruktur aufteile in Tabellen

    okay das scheint es gewesen zu sein zumindest bekommt man jetzt nicht mehr den laufzeitfehler

    aber nun sieht das ganze so aus
    Bild

    meine alter version sah so aus
    Bild

    und so sollte es eigentlich aussehen
    Bild
     
  10. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    ok, nun start ich mal meinen server/db und bau das nach, weil das nervt micht jetz.

    PHP:
    <? php

    $dbh 
    mysql_connect ( 'localhost' 'root' '' );
    mysql_select_db ( 'test123' $dbh );

    $query  mysql_query ( '
        SELECT
            `id`, `parent`, `label`
        FROM `daten`
        ORDER BY `id` ASC
    '
    );

    $items  = array();
    while(
    $row  mysql_fetch_assoc ( $query ))
        
    $item [] =  $row ;

    print <<<TEND
    <table cellpadding="0" cellspacing="0" border="1">
        <tbody>
            <tr>
    TEND;
                
    build_tree ( $item 0 );

    print <<<TEND
            </tr>
        </tbody>
    </table>
    TEND;

    // ----------------------------------

    function  build_tree (array & $items $parent ) {    
        
    $titems  array_filter ( $items , function( $var ) use( $parent ) { 
            return 
    $var [ 'parent' ] ==  $parent
        });
        
        if(!
    count ( $titems ))
            return;
        
        
    $cols  1 ;
        
        while(list(
    $index $item ) =  each ( $titems )) {
            print 
    "\n\t\t<td>\n\t\t\t<ul>\n\t\t\t\t<li> { $item [ 'label' ]} " ;
            unset(
    $items [ $index ]);
            
    build_sub_tree ( $items $item [ 'id' ],  1 );
            print 
    "</li>\n\t\t\t</ul>\n\t\t</td>\n" ;
            
            if(++
    $cols  &&  count ( $items )) {
                print 
    "\t</tr>\n\t<tr>" ;
                
    $cols  1 ;
            }
        }
    }

    function 
    build_sub_tree (array & $items $parent $depth ) {
        
    $titems  array_filter ( $items , function( $var ) use( $parent ) {
            return 
    $var [ 'parent' ] ==  $parent ;
        });
        
        if(!
    count ( $titems ))
            return;
        
        
    $t1  str_repeat ( "\t" $depth  4 );
        
    $t2  $t1  "\t" ;
        print 
    "\n { $t1 } <ul>" ;
        
        while(list(
    $index $item ) =  each ( $titems )) {
            print 
    "\n { $t2 } <li> { $item [ 'label' ]} " ;
            unset(
    $items [ $index ]);
            
    build_sub_tree ( $items $item [ 'id' ],  $depth  2 );
            print 
    "</li>" ;
        }
        
        print 
    "\n { $t1 } </ul>\n"  str_repeat ( "\t" $depth  3 );
    }

    ergebnis:
    HTML:
    <table cellpadding="0" cellspacing="0" border="1">
     <tbody>
     <tr>
     <td>
     <ul>
     <li>Familie
     <ul>
     <li>Vater
     <ul>
     <li>Sohn 1</li>
    
     <li>Sohn 2
     <ul>
     <li>Kind 1</li>
     <li>Kind 2</li>
     </ul>
     </li>
     <li>Tochter 1</li>
     <li>Tochter 2</li>
    
     </ul>
     </li>
     <li>Mutter</li>
     <li>Tochter</li>
     <li>Sohn</li>
     </ul>
     </li>
    
     </ul>
     </td>
    
     <td>
     <ul>
     <li>Freunde
     <ul>
     <li>Gute Freunde</li>
     <li>Geht so Freunde</li>
    
     </ul>
     </li>
     </ul>
     </td>
    
     <td>
     <ul>
     <li>Bekannte</li>
     </ul>
    
     </td>
     </tr>
     </tbody>
    </table>
     
  11. 11. März 2010
    AW: Baumstruktur aufteile in Tabellen

    Vielen danke für die mühe, jetzt funktioniert es 1a

    bw is raus
     
  12. 16. März 2010
    AW: Baumstruktur aufteile in Tabellen

    nun stehe ich vor noch einem Problem, unzwar ich will den ganzen Baum als Navi nutzen wenn ich nun zb auf Sohn klicke dann wollte ich das er mir die navigation so ausgibt wenn sie aktive ist

    Familie >> Vater >> Sohn

    ich habe das ganze auch fast schon hinbekommen nur leider zeigt er bei mir immer alle an

    HTML:
    <tr>
     <td><a href="index.php?page=shop&amp;cat=1">Familie</a>» <a href="index.php?page=shop&amp;cat=3">Vater</a>» <a href="index.php?page=shop&amp;cat=9">Sohn</a>» <a href="index.php?page=shop&amp;cat=10">Sohn</a>» <a href="index.php?page=shop&amp;cat=13">Kind 1</a>» <a href="index.php?page=shop&amp;cat=14">Kind 2</a>» <a href="index.php?page=shop&amp;cat=11">Tochter</a>» <a href="index.php?page=shop&amp;cat=12">Tochter</a>» <a href="index.php?page=shop&amp;cat=4">Mutter</a>» <a href="index.php?page=shop&amp;cat=5">Tochter</a>» <a href="index.php?page=shop&amp;cat=6">Sohn</a><a href="index.php?page=shop&amp;cat=2">Freunde</a>» <a href="index.php?page=shop&amp;cat=7">gute Freunde</a>» <a href="index.php?page=shop&amp;cat=8">geht so Freunde</a><a href="index.php?page=shop&amp;cat=15">Bekannte</a>» <a href="index.php?page=shop&amp;cat=16">guter Bekannter</a><a href="index.php?page=shop&amp;cat=17">Test</a></td>
    
     </tr>
    
    möchte aber halt nur den pfad haben der aktiv ist, aslo so hier
    HTML:
    <tr>
     <td><a href="index.php?page=shop&amp;cat=1">Familie</a>» <a href="index.php?page=shop&amp;cat=3">Vater</a>» <a href="index.php?page=shop&amp;cat=9">Sohn</a></td></tr>
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.