Re: Recursive Childs

From: Date: Sun, 22 Apr 2001 04:47:56 +0000
Subject: Re: Recursive Childs
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-49721@lists.php.net to get a copy of this message
>Subject: [PHP] Recursive Childs <snip> > like hotscripts.com too, so i thought if someone could tell me how to use get all the children : > > ID | NAME | PARENT > 1 X 0 > 2 Y 1 > 3 Z 2 > 4 A 2 > 5 F 1 > 6 G 5 > if i want to get all children of 1, i want to get 2, 3, 4, 5, 6! > > how do i get this, thanks! > Hi Natasha, As your subject implies, the way to do this is with a recursive function call. Assuming your data is in a PostgreSQL database table, you could use something like the following (*untested* -- modify as required if you are using MySQL or something else) Hope this helps! Joe ************************************************* <?PHP function getChildren($conn,$parent,$level,&$currentrecord,&$rowclr) { $level += 1; $levelpad = ""; for($counter = 0; $counter < $level - 1; $counter++) { $levelpad = $levelpad . "->"; } $levelpad = $levelpad . ""; If (! empty($parent)) { $sql = "select id, name, parent from mytable where parent =$parent order by id"; $rs = pg_exec($conn,$sql); for ($row = 0; $row <= pg_numrows($rs) - 1; $row++) { $currentrecord += 1; if ($rowclr == "#d7d7d7") { $rowclr = "#ffffff"; } else { $rowclr = "#d7d7d7"; } for ($field = 0; $field <= pg_numfields($rs) - 1; $field++) { $rsf[pg_fieldname($rs,$field)] = pg_result($rs,$row,$field); } print("<tr bgcolor=\"" . $rowclr . "\">\n"); print("<td align=\"left\">" . $levelpad . $rsf["id"] . "&nbsp;</td>\n"); print("<td align=\"left\">" . $rsf["name"] . "&nbsp;</td>\n"); print("<td align=\"center\">" . $level . "&nbsp;</td>\n"); print("</tr>\n"); $newparent = $rsf["parent"]; getChildren($conn,$newparent,$level,$currentrecord,$rowclr); }; pg_freeresult($rs); } else { print("<h3>No information found.</h3>\n"); } } $conn = pg_connect("dbname=mydb user=postgres"); $parent = 0; $level = 0; $currentrecord = 0; $rowclr = "#e7e7e7"; print("<HTML><BODY>\n"); print("<table cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n"); print("<tr bgcolor=\"#BBBBBB\">\n"); print("<th align=\"left\">ID</th>\n"); print("<th align=\"left\">Name</th>\n"); print("<th align=\"center\">Level</th>\n"); print("</tr>\n"); getChildren($conn,$parent,$level,$currentrecord,$rowclr); print("</TABLE>\n"); if ($currentrecord == 0) { print("<H3>No matches found.</H3>\n"); } print("</BODY></HTML>\n"); ?>

« previous php.general (#49721) next »