循环遍历整个目录php

时间:2013-08-16 15:06:12

标签: php

我可以遍历一个目录和一个像这样的子文件夹

$directoryArray = scandir('../portalFolders/');
        foreach($directoryArray as $directory){
            $listString .='
                <li class="closed"><span class="folder">'.$directory.'</span>';
                $subDirectoryArray = scandir('../portalFolders/'.$directory);
                $howManyFolders = $subDirectoryArray -> count();
                if($howManyFolders > 0){
                    $listString .= '<ul>';
                        foreach($subDirectoryArray as $subDirectory){
                            $listString .=  '<li class="closed"><span class="folder">'.$subDirectory.'</span><li>';
                        }
                    $listString .= '</ul>'; 
                }
                else{
                    $listString .= '</li>';
                }       
        }

如何在不嵌套另一个foreach()的情况下搜索/遍历子目录的所有子目录?这样,我可以通过FTP添加任意数量的文件夹/子文件夹,而不必在代码中更深入地嵌套。

2 个答案:

答案 0 :(得分:0)

您可以考虑使用array_walk_recursive。 (来自PHP.net):

示例#1 array_walk_recursive()示例

<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
    echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
?>

以上示例将输出: 一个苹果 b持香蕉 酸拿着柠檬

http://php.net/manual/en/function.array-walk-recursive.php

答案 1 :(得分:0)

正如其他人所暗示的,你可能会使用某种形式的递归来做到这一点。但是这里有一个例子,说明如何在不使用RecursiveDirectoryIterator的情况下完成它:

function listDirectories($dir) {
    echo "<ul><li>$dir";
    foreach (glob("$dir/*", GLOB_ONLYDIR) as $d) {
        listDirectories($d);
    }
    echo "</ul>";
}
listDirectories('.');