循环通过整个目录php


Loop Through Entire Directory 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添加任意多的文件夹/子文件夹,而不必在代码中做更深的嵌套。

正如其他人所暗示的,您可能会使用某种形式的递归来实现这一点。但这里有一个不使用RecursiveDirectoryTerator的例子:

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

您可以考虑array_walk_recurive。(来自PHP.net):

示例#1 array_walk_recurive()示例

<?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');
?>

上面的示例将输出:a能装苹果b拿着香蕉酸味柠檬

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