0

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

$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 添加任意数量的文件夹/子文件夹,而不必在代码中加深嵌套。

4

2 回答 2

0

你可以考虑array_walk_recursive。(来自 PHP.net):

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

上面的例子会输出:a 持有苹果 b 持有香蕉 酸持有柠檬

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

于 2013-08-16T15:12:02.600 回答
0

正如其他人所暗示的那样,您可能会使用某种形式的递归来执行此操作。但这里有一个示例,说明如何在不使用 RecursiveDirectoryIterator 的情况下执行此操作:

function listDirectories($dir) {
    echo "<ul><li>$dir";
    foreach (glob("$dir/*", GLOB_ONLYDIR) as $d) {
        listDirectories($d);
    }
    echo "</ul>";
}
listDirectories('.');
于 2013-08-16T15:22:59.033 回答