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