我可以循环通过一个目录和一个子文件夹,如
$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