beh per prima cosa ti serve una funzione per leggere ricorsivamente tutte le cartelle e file al suo interno...
Codice PHP:
<?php
function list_elements($dir,$out
  {
  
$file_list '';
  
$stack[] = $dir;
  while (
$stack
    {
    
$current_dir array_pop($stack);
    if (
$dh opendir($current_dir)) 
      {
      while ((
$file readdir($dh)) !== false
        {
        if (
$file !== '.' AND $file !== '..'
          {
          
$current_file "{$current_dir}/{$file}";
          if (
is_file($current_file)) 
            {
            
$file_list[] = "{$current_dir}/{$file}";
            } 
          elseif (
is_dir($current_file)) 
            {
            
$stack[] = $current_file;
            
$dirs[]=$current_file//l' array delle directory
          //echo $current_file." corrisponde ad una directory
";    // questa
            }
          }
        }
      }
    }
  if (
$out=='file')
    return 
$file_list;
  if (
$out=='dir')
    {
    //
$dirs=array_reverse($dirs);
    return 
$dirs;
    }
  }

$dirs=list_elements("cartella di root",'dir');
$files=list_elements("cartella di root",'file');

echo "
<pre>";
print_r(
$dirs);
print_r(
$files);

?>
questa è sicuramente una buona base su cui iniziare poi per l' ordinamento magari vedi di metterci le mani te all' interno della funzione