Home > Archive > PHP Programming > September 2006 > Re: Directory Recursion and Multidimensional Arrays
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Re: Directory Recursion and Multidimensional Arrays
|
|
| Oli Filth 2006-09-26, 6:57 pm |
| Tyrone Slothrop said the following on 25/09/2006 19:24:
> I have created a script which recurses a display of directories like
> so:
>
> <?
> $dir = "/path/to/base/directory";
> function scan_dir_recurse ($dir,$tab)
> {
> global $fileArr;
> $tab++;
> 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);
> }
> }
> }
> }
> scan_dir_recurse($dir,0);
> ?>
>
> 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?
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.
--
Oli
| |
| Tyrone Slothrop 2006-09-27, 3:57 am |
| On Tue, 26 Sep 2006 15:03:24 GMT, Oli Filth <catch@olifilth.co.uk>
wrote:
>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.
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. ;-)
Thanks!
|
|
|
|
|