Mailinglisten-Archive |
Problem habe ich inzwischen lösen können. Danke. Gruß Lars LB BL schrieb: >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; > } > > > > >
php::bar PHP Wiki - Listenarchive