我写了一个递归函数,它返回一个数组,其中包含给定路径中所有文件/文件夹的路径。数组已经排序并返回我想要的确切信息,但我很难在html列表中正确显示它。
Array_of_paths = (
[0] => /path/to/folderA/
[1] => /path/to/folderA/subfolderAA/
[2] => /path/to/folderB/
[3] => /path/to/folderB/subfolderBB/
[4] => /path/to/folderB/subfolderBB/fileBB.txt
[5] => /path/to/folderB/fileB.txt
[6] => /path/to/folderC/
...
)
我想将这些路径放在<ul>
,<li>
标记中以查看类似的内容:
<ul>
<li>/path/to/folderA/
<ul>
<li>/path/to/folderA/folderAA/</li>
</ul>
</li>
<li>/path/to/folderB
<ul>
<li>/path/to/folderB/subfolderBB/
<ul>
<li>/path/to/folderB/subfolderBB/fileBB.txt</li>
</ul>
</li>
<li>/path/to/folderB/fileB.txt</li>
</ul>
</li>
<li>/path/to/folderC/</li>
</ul>
=&GT;
<ul>
<li>/path/to/folderA/
<ul>
<li>/path/to/folderA/folderAA/</li>
</ul>
</li>
<li>/path/to/folderB
<ul>
<li>/path/to/folderB/subfolderBB/
<ul>
<li>/path/to/folderB/subfolderBB/fileBB.txt</li>
</ul>
</li>
<li>/path/to/folderB/fileB.txt</li>
</ul>
</li>
<li>/path/to/folderC/</li>
</ul>
我设法找到了几个类似的问题,但答案是用Ruby语言编写的。那么,这背后的问题解决方法是什么?
答案 0 :(得分:1)
$lastD = 0;
foreach ($p as $e)
{
$depth = substr_count($e, '/');
//if this is a file, then add one to the depth count
if (substr($e,-1) != '/')
$depth++;
if ($depth > $lastD)
{
echo "<ul>";
$lastD = $depth;
}
if ($depth < $lastD)
{
echo "</ul>";
$lastD = $depth;
}
echo "<li>$e";
}
返回:
答案 1 :(得分:1)
如果您使用的是PHP5,请使用RecursiveDirectoryIterator和RecursiveIteratorIterator来完成这项工作。
$dir = new RecursiveDirectoryIterator("/path");
$it = new RecursiveIteratorIterator($dir);
foreach ($it as $key => $value) {
// Use $it->getDepth() and $value->getRealpath()
// with Byron's code to generate your list
}
答案 2 :(得分:1)
我正在使用您发布的这段代码。
嵌套UL的结构不太正确,所以我只是添加了一个快速修复,以便获得结束的ul标签,以便它可以用于更多级别。
...
if ($depth < $lastD)
{
$closingULs=$lastD-$depth;
for($i=0;$i<$closingULs;$i++)
{
$uls.="</ul>";
}
echo $uls;
$lastD = $depth;
}
答案 3 :(得分:0)
恕我直言,最好以更高效,更相似的格式存储数据。您可以通过/来爆炸()您的数组并通过数组创建树,然后很容易预先计算数组并构建HTML列表。
foreach ( $paths as $path )
{
$pieces = explode('/', $path);
foreach ( $pieces as $piece )
{
$pathtree[$piece] = '';
}
}
这个新的$ pathtree数组要小得多,可能是$ paths数组的1/4。从这一点开始,您只需要预先构建HTML列表树。