probleme mit rekursion
heike
- php
Hallo ihr lieben.
ich habe ein problem das ich wohl mit rekursion loesen muss. nur ich denke jetzt schon seit vier stunden im kreis und will nun hier mal um hilfe fragen.
grob gesagt habe ich eine db-tabelle, in der meine navigation liegt:
id, parent_id, name
jetzt wollte ich eine funktion schreiben, die mir mit eingabe der "start-id" und der maximalen verschachtelungstiefe alle damit verknuepften eintraege liefert.
ausgabebeispiel.
haus
haus > fenster
haus > fenster > klein
haus > tueren
haus > tueren > rund
haus > tueren > eckig
also ich bild mir ein, dass das rekursiv geht.
versteht jemand, was ich gerade nicht verstehe?!?
Hallo Heike,
hast Du schon das Archiv durchsucht? Vielleicht findest Du dort ein paar Denkanstöße und Lösungswege: http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=datenbank+rekursion+parent&lang=on&feld=alle&index_5=on&index_6=on&index_7=on&index_8=on&index_9=on&index_10=on&index_11=on&hits=100
MfG
Danny
你好 Danny,
Solche Links sind kontraproduktiv. Man findet im Archiv nur noch Links auf
die Suche oder »Such im Archiv«-Hinweise...
再见,
CK
Hello,
haus
haus > fenster
haus > fenster > klein
haus > tueren
haus > tueren > rund
haus > tueren > eckigalso ich bild mir ein, dass das rekursiv geht.
versteht jemand, was ich gerade nicht verstehe?!?
function get_path2root($id)
{
$tree = array();
# Datensataz zur ID holen
$_tree[] = $_rec;
if(!is_null($_rec['parent']))
{
$_tree[] = get_path2root($parent);
}
return $_tree;
}
So kannst Du auf jeden Fall von einer beliebigen Stelle im Baum den Weg zur Root zurück finden.
Das ist aber dann nur ein Ast.
Ich würde in der Navigation sowieso immer nur maximal drei Ebenen anzeigen
haus
fenster <-- aktuell ausgewähltes Element (hier Knoten) des Baumes
klein <--+
groß <--+- Blätter der aktuellen Ebene, ob es in Wirklichkeit auch Knoten sind,
Sprossen <--+ wird erst angezeigt, wenn man sie öffnet, also in die aktuelle
tueren Ebe vorrückt.
treppen
heizungen
^
|
|
aktuell aktive Ebene
Wenn ich jetz auf fenster/klein klicke, würde sich die Darstellung folgendermaßen verändern:
fenster
klein
Ganzglasscheibe
mit Sprosse in Aspik
mit aufgesezter Sprosse
mit glasteilender Sprosse
groß
Sprossen
tueren
treppen
heizungen
usw.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Danke, Tom.
Ich schau mir doch gleich mal Deine Funktion an, in der übrigens ein kleiner Schreibfehler steckt: $tree und $_tree...
function get_path2root($id) {
$tree = array();
# Datensataz zur ID holen
$_tree[] = $_rec;
if(!is_null($_rec['parent'])) {
$_tree[] = get_path2root($parent);
}
return $_tree;
}So kannst Du auf jeden Fall von einer beliebigen Stelle im Baum den Weg zur Root zurück finden.
Eigentlich wollte ich ja nicht von einer beliebigen Stelle im Baum den Weg _zurück_ finden, sondern eine beliebige Stelle im Baum als Root definieren und von dort aus die untergeordneten Äste/Blätter finden...
Das ist aber dann nur ein Ast.
Ich würde in der Navigation sowieso immer nur maximal drei Ebenen anzeigen
...auch wenn das dann auf drei Ebenen beschränkt ist. Für eine Navigation macht das Sinn, stimmt. Nur wenn ich die Funktion später auch in der Sitemap einsetzen möchte, dann wäre es doch praktisch auf alle Äste/Blätter zuzugreifen, oder?
Liebe Grüße aus Mainz