PHP script to traverse directory/file tree and output tree as nested ULs
arrays, directory, html, php, recursion
Solution
What I think you need here is the RecursiveDirectoryIterator from the PHP Standard Library (SPL)
You can then write something similar to the below:
function iterateDirectory($i)
{
echo '<ul>';
foreach ($i as $path) {
if ($path->isDir())
{
echo '<li>';
iterateDirectory($path);
echo '</li>';
}
else
{
echo '<li>'.$path.'</li>';
}
}
echo '</ul>';
}
$dir = '/food';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
iterateDirectory($iterator);
Problem
I have a tree of directories, sub-directories, and files (in some but not all the directories). Here's an example of the whole tree: ``` /food /food/drinks /food/drinks/water.html /food/drinks/milk.html /food/drinks/soda.html /food/entrees /food/entrees/hot /food/entrees/hot/hamburger.html /food/entrees/hot/pizza.html /food/entrees/cold /food/entrees/cold/icecream.html /food/entrees/cold/salad.html /cosmetics /cosmetics/perfume /cosmetics/perfume/chic.html /cosmetics/perfume/polo.html /cosmetics/perfume/lust.html /cosmetics/lipstick /cosmetics/lipstick/colors /cosmetics/lipstick/colors/red.html /cosmetics/lipstick/colors/pink.html /cosmetics/lipstick/colors/purple.html ``` OK, From a php script in the '/' directory, I want to recurse or traverse this directory tree and print the tree like this: ``` <ul> <li>food</li> <ul> <li>drinks</li> <ul> <li>water.html</li> <li>milk.html</li> <li>soda.html</li> </ul> <li>entrees</li> <ul> <li>hot</li> <ul> <li>hamburger.html</li> <li>pizza.html</li> </ul> <li>cold</li> <ul> <li>icecream.html</li> <li>salad.html</li> </ul> </ul> </ul> <li>cosmetics</li> <ul> <li>perfume</li> <ul> <li>chic.html</li> <li>polo.html</li> <li>lust.html</li> </ul> <li>lipstick</li> <ul> <li>colors</li> <ul> <li>red.html</li> <li>pink.html</li> <li>purple.html</li> </ul> </ul> </ul> </ul> ```