non mi fido di quel "merge"... quindi preferisco la mia funzione ricorsiva:

codice:
function list_dir($dir)
{
  //il secondo argomento è opzionale (serve solo per la ricorsione):
  $args = func_get_args();
  if(isset($args[1]))
    $lista = $args[1];
  
  //scorriamo la dir attuale:
  $dp = opendir($dir);
  while($file = readdir($dp))
  {
    if($file != '..' and $file != '.' and $file != '')
    { 
      //se è un file, lo aggiungiamo alla lista:
      if(is_file($dir . '/' . $file))
      {
        if(isset($lista))
          $lista[count($lista)] = $dir . '/' . $file;
        else
          $lista[0] = $dir . '/' . $file;
      }
      
      //se è una directory, andiamo ricorsivamente a scorrerla:
      if(is_dir($dir . '/' . $file))
      {
        if(isset($lista))
          $lista = list_dir($dir . '/' . $file, $lista);
        else
          $lista = list_dir($dir . '/' . $file);
      }
    }
  }
  
  return $lista;
}