如何获取递归文件名并将其存储在php中的数组中

时间:2012-10-23 17:35:49

标签: php file-io

我有一个函数在特定路径中获取递归文件夹的文件名:

function getDirectory( $path = '.', $level = 0 ){

$ignore = array( 'cgi-bin', '.', '..');
// Directories to ignore when listing output. Many hosts
// will deny PHP access to the cgi-bin.

$dh = @opendir( $path );
// Open the directory to the handle $dh
$files_matched = array(); 


while( false !== ( $file = readdir( $dh ) ) ){
// Loop through the directory

    if( !in_array($file, $ignore ) && !preg_match("/^.*\.(rar|txt)$/", $file) ){
    // Check that this file is not to be ignored

        if( is_dir( "$path/$file" ) ){
        // Its a directory, so we need to keep reading down...

            echo "<strong>$spaces $file</strong><br />";

            getDirectory( "$path/$file", ($level+1) );
            // Re-call this same function but on a new directory.
            // this is what makes function recursive.

        } else {
            $files_matched[$i] = $file;
            $i++;
        }

    }

}

closedir( $dh );
// Close the directory handle
return $files_matched;
}

echo "<pre>";
$files = getDirectory("F:\Test");
foreach($files as $file) printf("%s<br />", $file);
echo "</pre>";

我使用$ files_matched将文件名存储在一个数组中。

对于上述结果,它只显示“F:\ test”下的文件名。

实际上,我在“F:\ test”下有一个子文件夹。如何使用阵列显示这些文件名进行存储?

如果我修改了代码:

$files_matched[$i] = $file;
$i++;

成:

echo "$files<br />";

这将工作正常,我只是不知道为什么使用数组来存储文件名以便后续进程不起作用?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不记得从哪里获得此代码,但它确实有用。

<?php

function getDirectoryTree( $outerDir , $x){
    $dirs = array_diff( scandir( $outerDir ), Array( ".", ".." ) );
    $dir_array = Array();
    foreach( $dirs as $d ){
        if( is_dir($outerDir."/".$d)  ){
            $dir_array[ $d ] = getDirectoryTree( $outerDir."/".$d , $x);
        }else{
            if (($x)?ereg($x.'$',$d):1)
            $dir_array[ $d ] = $d;
        }
    }
    return $dir_array;
}

var_dump( getDirectoryTree(getcwd(),'') );