Directory Recursion and Multidimensional Arrays

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I have created a script which recurses a display of directories like

$dir = "/path/to/base/directory";
function scan_dir_recurse ($dir,$tab)
 global $fileArr;
 if ($tab > 4) { exit ("Tab length exceeded."); }
 $files = scandir($dir);
 for ($i=0; $i<count($files); $i++)
  if ($files[$i] != '.' && $files[$i] != '..')
   echo str_repeat("  ", $tab-1).$files[$i]."\n";
   if (is_dir($dir.'/'.$files[$i]))
    scan_dir_recurse ($dir.'/'.$files[$i],$tab);

What is want to do is generate a multidimensional array which will be
accessable on a DHTML page of select boxes where, a user first selects
a top directory, then a select box appears of directories under it,
etc. until a list of available files is available.

For example:
$fileArr[0] = 'dir1';
$fileArr[0][0] = 'dir2';
$fileArr[0][0][0] = 'dir3';
$fileArr[0][0][0][0] = 'a_file';

The solution to adding another level of recursion to the array escapes
me at the moment.  Any ideas?


Re: Directory Recursion and Multidimensional Arrays

Quoted text here. Click to load it
Make a tree structure instead.......

Re: Directory Recursion and Multidimensional Arrays

Tyrone Slothrop said the following on 25/09/2006 19:24:
Quoted text here. Click to load it

You can't have it exactly as you demonstrate above, because that would  
mean that $fileArr[0] would have to be a string ('dir1') and an array  
(the sub-array) simultaneously.  A couple of suggestions:

1. In each array (or sub-array), have $array[0] be the directory name,  
and then $array[1], $array[2], ... be the sub-arrays.

2. Have each element of the array be a class object, e.g.:

     class Directory
          public $name;
          public $contents;

where $contents is an array of child Directory objects.

As for implementation, you will need to add an extra argument to the  
scan_dir_recurse() function, which you will use to pass the current  
parent directory object.  Then scan_dir_recurse can add child objects to  
it as it finds them.


Re: Directory Recursion and Multidimensional Arrays


Quoted text here. Click to load it

After making myself crazy with this, I think AJAX can do what I need
quite well, particurly since the directory structure is four deep and
there are duplicate directory and file names.  The first select will
show the first set of directories.  onSelect will generate and display
the next set of directories from a call to the script, etc.  The only
gotcha is that the script is going to have to know what is a file and
what is a directory.

It ought to be an interesting application.  ;-)


Site Timeline