#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 wie kann ich das realisieren? habe schon alles mögliche probiert aber irgendwie will es einfach nicht klappen + Multi-Zitat Zitieren
#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>' ; + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#4 11. März 2010 AW: Baumstruktur aufteile in Tabellen mach mal um das array_filter noch array_values() + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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 ; })); + Multi-Zitat Zitieren
#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 ; })); + Multi-Zitat Zitieren
#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 meine alter version sah so aus und so sollte es eigentlich aussehen + Multi-Zitat Zitieren
#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 > 3 && 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> + Multi-Zitat Zitieren
#11 11. März 2010 AW: Baumstruktur aufteile in Tabellen Vielen danke für die mühe, jetzt funktioniert es 1a bw is raus + Multi-Zitat Zitieren
#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&cat=1">Familie</a>» <a href="index.php?page=shop&cat=3">Vater</a>» <a href="index.php?page=shop&cat=9">Sohn</a>» <a href="index.php?page=shop&cat=10">Sohn</a>» <a href="index.php?page=shop&cat=13">Kind 1</a>» <a href="index.php?page=shop&cat=14">Kind 2</a>» <a href="index.php?page=shop&cat=11">Tochter</a>» <a href="index.php?page=shop&cat=12">Tochter</a>» <a href="index.php?page=shop&cat=4">Mutter</a>» <a href="index.php?page=shop&cat=5">Tochter</a>» <a href="index.php?page=shop&cat=6">Sohn</a><a href="index.php?page=shop&cat=2">Freunde</a>» <a href="index.php?page=shop&cat=7">gute Freunde</a>» <a href="index.php?page=shop&cat=8">geht so Freunde</a><a href="index.php?page=shop&cat=15">Bekannte</a>» <a href="index.php?page=shop&cat=16">guter Bekannter</a><a href="index.php?page=shop&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&cat=1">Familie</a>» <a href="index.php?page=shop&cat=3">Vater</a>» <a href="index.php?page=shop&cat=9">Sohn</a></td></tr> + Multi-Zitat Zitieren