On Tue, 2009-08-25 at 12:06 +0200, Ralph Deffke wrote:
> I would say
> foreach( $dirTree as $key => $value ){
>     echo $key ."<br>";
>     foreach( $value as $v){
>         echo $v ."<br>;
>     }
> }
> 
> something like that
> 
> ralph_def...@yahoo.de
> "Tom Chubb" <tomch...@gmail.com> wrote in message
> news:4577934f0908250241i195dc691x3f8c552e72791...@mail.gmail.com...
> Hi gang,
> I'm trying to create a script to read the files in a folder (approx
> 2000) and get the filename, path and last modified date in a tabulated
> format to copy into excel. (We have been issued a CD and need to get
> all files documented and assigned to an owner.)
> 
> I've tried loads of different scripts but can't get them working with
> all the features.
> I think the best one to work with is this (although I'm having
> problems getting the date but don't worry about that at the moment)
> 
> <?
> error_reporting(E_ALL);
> ini_set('display_errors', true);
> function getDirectory($path = '.', $ignore = '') {
> $dirTree = array ();
> $dirTreeTemp = array ();
> $ignore[] = '.';
> $ignore[] = '..';
> 
> $dh = @opendir($path);
> 
> while (false !== ($file = readdir($dh))) {
> 
> if (!in_array($file, $ignore)) {
> if (!is_dir("$path/$file")) {
> 
> $dirTree["$path"][] = $file;
> 
> } else {
> 
> $dirTreeTemp = getDirectory("$path/$file", $ignore);
> if (is_array($dirTreeTemp))$dirTree =
> array_merge($dirTree, $dirTreeTemp);
> }
> }
> }
> closedir($dh);
> 
> return $dirTree;
> }
> 
> $ignore = array('.htaccess', 'error_log', 'cgi-bin', 'php.ini',
> '.ftpquota');
> 
> $dirTree = getDirectory('./Tender', $ignore);
> ?>
> <pre>
> <?
> print_r($dirTree);
> ?>
> </pre>
> 
> <?php
> getdirectory('./Tender');
> //or
> //get_dir_iterative(/*etc.*/);
> ?>
> 
> 
> 
> 
> 
> 
> Here is an example of what I'm getting out from the $dirTree array:
> 
>     Array
> (
>     [./Tender] => Array
>         (
>             [0] => 9216_100_REV_V1.0_bound.dwg
>         )
> 
> 
>     [./Tender/Tender Docs] => Array
>         (
>             [0] => BAA Works Terms v1.1 (22.05.08).pdf
>             [1] => Contents of Volumes 1 and 2.pdf
>             [2] => Cover Letter and Instructions.doc
> 
>             [3] => Form of Tender.doc
>         )
> 
>     [./Tender/Tender Docs/Health and Safety Questionnaire] => Array
>         (
>             [0] => NT Baggage Tender Questionaire rev2.xls
>         )
> 
> 
>     [./Tender/Tender Docs/NTB BH Lighting] => Array
>         (
>             [0] => 3J-B-1 PIR.xls
>             [1] => 3J-B-2B PIR.xls
>             [2] => 3J-B-2R PIR.xls
>             [3] => 3J-B-3R PIR.xls
> 
>             [4] => 3J-D PIR.xls
>             [5] => 4G-G PIR.xls
>             [6] => 4J-B-1B PIR.xls
>             [7] => 4J-B-1R PIR.xls
>             [8] => 4J-B-2B PIR.xls
>             [9] => 4J-B-2R PIR.xls
> 
>             [10] => 4J-B-4 PIR.xls
>             [11] => 5G-G PIR.xls
>         )
> 
> I'm having problems getting my head round how to get access the array
> data so that I can format it how I want, eg:
> 
> Folder   Filename
> Tender   9216_100_REV_V1.0_bound.dwg
> Tender/Tender Docs   BAA Works Terms v1.1 (22.05.08).pdf
> Tender/Tender Docs   Contents of Volumes 1 and 2.pdf
> 
> etc.
> 
> I'm trying to do this at work (php is a hobby and this is the first
> time I've tried to use it in my electrical engineering job) in notepad
> without any code highlighting, etc. and tearing my hair out to try and
> avoid going through the CD manually!
> 
> Could anybody please help or let me know which function I need to read
> up on? I've tried countless searches on array formatting, etc and not
> getting anywhere.
> 
> Thanks in advance,
> 
> Tom
> 
> 
> 
Funnily enough, I've had to dust off an old function I wrote for this
sort of thing this very morning:

function dirTree($dir)
{
        $dirs = Array();
        if($dh = opendir($dir))
        {
                $dirCount = 0;
                while(false !== ($file = readdir($dh)))
                {
                        // ignore the pseudo . and .. directories
                        if( $file == '.' || $file == '..')
                        {
                                continue;
                        }
                        $path = str_replace('//', '/', "$dir/$file");
                        if(is_dir($path))
                        {
                                $dirs[$path] = dirTree($path);
                                $dirCount ++;
                        }
                        if(is_file($path) )
                        {
                                // process this file

                        }
                }
                if($dirCount > 0)
                {
                        return $dirs;
                }
                else
                {
                        return false;
                }
        }
        else
        {
                return false;
        }
}

$dir = "/home/user/Documents/";
$tree = dirTree($dir);

The array $tree is a multidimensional array which should make sense to
look at if you do a print_r() on it!

The code looks a bit messy, and could be improved probably a dozen ways,
but it does work, and is very easy to mess around with.

Thanks,
Ash
http://www.ashleysheridan.co.uk




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to