Directory Recursion and Multidimensional Arrays

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Tyrone Slothrop

    Directory Recursion and Multidimensional Arrays

    I have created a script which recurses a display of directories like
    so:

    <?
    $dir = "/path/to/base/directory";
    function scan_dir_recurs e ($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_recurs e ($dir.'/'.$files[$i],$tab);
    }
    }
    }
    }
    scan_dir_recurs e($dir,0);
    ?>

    What is want to do is generate a multidimensiona l 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?

    TIA!
  • pittendrigh

    #2
    Re: Directory Recursion and Multidimensiona l Arrays

    For example:
    $fileArr[0] = 'dir1';
    $fileArr[0][0] = 'dir2';
    $fileArr[0][0][0] = 'dir3';
    $fileArr[0][0][0][0] = 'a_file';
    >
    Make a tree structure instead.......

    Comment

    • Oli Filth

      #3
      Re: Directory Recursion and Multidimensiona l Arrays

      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_recurs e ($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_recurs e ($dir.'/'.$files[$i],$tab);
      }
      }
      }
      }
      scan_dir_recurs e($dir,0);
      ?>
      >
      What is want to do is generate a multidimensiona l 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_recurs e() function, which you will use to pass the current
      parent directory object. Then scan_dir_recurs e can add child objects to
      it as it finds them.


      --
      Oli

      Comment

      • Tyrone Slothrop

        #4
        Re: Directory Recursion and Multidimensiona l Arrays

        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_recur se() function, which you will use to pass the current
        >parent directory object. Then scan_dir_recurs e 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!

        Comment

        Working...