I am essentially using an adjacency matrix in a database to represent a directory structure.
Code: Select all
+----+-----+----------------+
| id | pid | directory_name |
+----+-----+----------------+
| 1 | 0 | / |
| 2 | 1 | Home |
| 3 | 2 | Downloads |
| 4 | 2 | Videos |
| 5 | 2 | Audio |
| 6 | 2 | Applications |
| 7 | 5 | Artists |
+----+-----+----------------+
Code: Select all
/
/Home
/Home/Downloads
/Home/Downloads/Videos
/Home/Downloads/Audio
/Home/Downloads/Applications
/Home/Downloads/Audio/ArtistsCode: Select all
$result = mysql_query("SELECT * FROM `directories` ORDER BY `pid`");
while($rows = mysql_fetch_assoc($result)) {
if($rows['directory_name'] != "/") {
echo $root . constructPath($rows['id']) . "<br />";
}
}
function constructPath($id) {
$result = mysql_query("SELECT * FROM `directories` WHERE `id` = '$id'");
$rows = mysql_fetch_assoc($result);
$dirs = array();
array_push($dirs, $rows['directory_name']);
$pid = $rows['pid'];
while($pid != 1) {
$result = mysql_query("SELECT * FROM `directories` WHERE `id` = '$pid'");
$rows = mysql_fetch_assoc($result);
array_push($dirs, $rows['directory_name']);
$pid = $rows['pid'];
}
array_reverse($dirs);
while(sizeof($dirs) != 0) {
$path .= array_pop($dirs) . "/";
}
return $path;
}John