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
 poi per l' ordinamento magari vedi di metterci le mani te all' interno della funzione  