Mailinglisten-Archive |
hallo, ich weiss auch nicht, ich mach seit stunden rum und griegs einfach net hin. zu blöd? das ist mein problem: ich hab in einem umfangreicheren zusammenhang einen nested-set tree in einem array vom prinzip her in dieser form zur verfügung: $ns_array = array("1-14","2-9","3-4",5-8","6-7","10-13","11-12"); (die array werte sind in meinem fall objekte, von denen ich den linken und rechten wert (wäre hier z.b. für den ersten knoten links:1,rechts:14) sowie die vergebene id abfragen kann.) ich benötige nun einen algorithmus, der mir einen string erzeugt, der dieses array, bzw. den baum der dahinter steht, in eine form bringt, die nach dem beispiel array etwa so aussähe: 1-14 2-9 3-4 2-9 5-8 6-7 5-8 2-9 1-14 10-13 11-12 10-13 1-14 man geht also den baum sozusagen durch, indem man zu jedem knoten wandert und wieder zurück. so speichere ich den baum serialisiert ab. ich habe auch schon einen algorithmus gehabt. doch der hat einen mini-denkfehler. problem bei meinem bisherigen ist, dass er beim im baum hochgehen nicht korrekt arbeitet. ich hoffe es blickt jemand was ich meine, und hat einen lösungsvorschlag. so sah mein alg. aus (anderer zusammenhang! diesselbe logik): function get_subtree_serialized($id = NULL) { $subtree_serialized = ""; if(is_null($id)) { $root_node = $this->get_root_node(); $id = $root_node["id"]; } $subtree_nodes = $this->get_subtree_nodes($id); $z_node = 0; $depth = 0; $leftsteps = 0; $passed_nodes = 0; $node = $subtree_nodes[0]; for($i=intval($subtree_nodes[0]["lft"]); $i<intval($subtree_nodes[0]["rgt"]); $i++) { $node_id_len = strlen($node["id"]); $node_id_len_len = strlen($node_id_len); $subtree_serialized .= $node_id_len_len . $node_id_len . $node["id"] ."<br>"; if($depth == 0) { $passed_nodes = $z_node; } if((intval($node["rgt"])-$i) > 1) {//go down echo($node['id']." go down<br>"); $z_node++; $depth++; $node = $subtree_nodes[$z_node]; } else {//go up echo($node['id']." go up"); $depth--; if($depth == 0) { $node = $subtree_nodes[$depth]; } else { $node = $subtree_nodes[$depth + $passed_nodes]; } } } return $subtree_serialized; } -- SMS bei wichtigen e-mails und Ihre Gedanken sind frei ... Alle Infos zur SMS-Benachrichtigung: http://www.gmx.net/de/go/sms
php::bar PHP Wiki - Listenarchive