我正在尝试构建一个函数,该函数将回显URL中所有子目录和文件的无序列表。
我知道这里有很多例子,但我很难找到合适的东西。
这是我到目前为止所做的:
$dir = "an/example/directory";
echo "<ul id='folderList'>";
$dirArr = dirToArray($dir);
listDir($dirArr);
echo "</ul>";
第一个函数以递归方式搜索文件和文件夹,并将它们分类为多维数组:
function dirToArray($dir)
{
$result = array();
$cdir = scandir($dir);
foreach($cdir as $key => $value) {
if (!in_array($value, array(".", ".."))) {
if(is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
$result[$dir . DIRECTORY_SEPARATOR . $value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
} else {
$result[$dir . DIRECTORY_SEPARATOR . $value] = $dir . DIRECTORY_SEPARATOR . $value;
}
}
}
return $result;
}
现在这是我遇到麻烦的部分。第二个函数应循环遍历多数组并相应地回显其内容。
function listDir($multiArr)
{
foreach ($multiArr as $key => $value) {
if (is_array($value)) {
echo '<li class="sub-directory"><span>'.basename($key).'</span>';
echo '<ul>';
listDir($multiArr[$key]);
echo '</ul>';
} else {
echo '<li class="file"><span>'.basename($value).'</span>';
}
echo '</li>';
}
}
然而,第二个功能似乎没有按预期工作。我不确定为什么,但似乎在递归循环中遇到了麻烦。
无论如何,这个想法是,一旦运行了两个函数,输出应该是这样的:
<ul id='folderList'>
<li class="sub-directory"><span>sub-directory-name</span>
<ul>
<li class="file><span>fileName1</span></li>
<li class="file><span>fileName2</span></li>
</ul>
</li>
<li class="file><span>fileName3</span></li>
</ul>
答案 0 :(得分:2)
这是获取主目录和子目录的简单函数
function listdir($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
echo '<li>'.$ff;
if(is_dir($dir.'/'.$ff)) listdir($dir.'/'.$ff);
echo '</li>';
}
}
echo '</ol>';
}
listdir('Main Dir');
答案 1 :(得分:1)
你可以使用bekow函数以表格格式列出......
function dirToArray($dir)
{
$cdir = scandir($dir);
echo "<table>";
foreach ($cdir as $key => $value)
{
echo "<tr>";
if (!in_array($value, array(".")))
{
if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td><a href='file_name.php?dir=$path' >" . $value . "</a></td>";
}
else
{
$path = $dir . DIRECTORY_SEPARATOR . $value;
echo "<td></td><td><a>". $value . "</a></td>";
}
}
echo "</tr>";
}
echo "</table>";
}
dirToArray($dir);