【发布时间】:2014-09-12 19:37:08
【问题描述】:
我正在尝试构建一个函数,该函数将从 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>
【问题讨论】:
-
您的 dirToArray() 函数是否返回正确的数组?
-
是的。如果它是一个文件,它将输出一个简单的值。如果是目录,则为数组
-
请更新数组好吗?
-
@user3143218 Scandir 已经返回并且数组和 Vijayaragavendran 创建了一个使用它的函数,只有你可以使用 Vijayaragavendran 的函数我认为你的问题会得到解决