将输出包装在正确嵌套的列表中 - PHP 目录列表



好的,我一直在寻找一种列出目录和文件的方法,我已经弄清楚了,并且正在使用我在StackOverflow上找到的代码(使用php列出目录中的所有文件夹子文件夹和文件(。

到目前为止,我已经更改了其中一个答案中的代码。我已经能够使用preg_replace从路径和文件名中删除文件扩展名,使用ucwords大写文件名,并使用str_replace切换空格的破折号。

我现在遇到的问题是将整个事情包装在一个正确嵌套的 HTML 列表中。我已经设法设置了它,以便将其包装在列表中,但它不会在需要时使用嵌套列表,而且我一生都无法弄清楚如何大写目录名称或替换目录名称中的任何破折号。

所以,问题是,如果有人会这么好心:

  1. 如何将输出包装在正确嵌套的列表中?
  2. 如何在删除前面的斜杠时大写目录名称并用空格替换破折号或下划线?

我故意将|&nbsp;&nbsp;留在$ss变量中。当我想加入字符来识别它在反复试验期间出现的位置时,我使用它作为某种标记(示例$ss = $ss . "<li>workingOrNot"(。

我正在使用:

<?php
$pathLen = 0;
function prePad($level) {
$ss = "";
for ($ii = 0;   $ii < $level;   $ii++) {
$ss = $ss . "|&nbsp;&nbsp;";
}
return $ss;
}
function dirScanner($dir, $level, $rootLen) {
global $pathLen;
$filesHidden = array(".", "..", '.htaccess', 'resources', 'browserconfig.xml', 'scripts', 'articles');
if ($handle = opendir($dir)) {
$fileList = array();
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && !in_array($entry, $filesHidden)) {
if (is_dir($dir . "/" . $entry)) {
$fileList[] = "F: " . $dir . "/" . $entry;
}
else {
$fileList[] = "D: " . $dir . "/" . $entry;
}
}
}
closedir($handle);
natsort($fileList);
foreach($fileList as $value) {
$displayName = ucwords ( str_replace("-", " ", substr(preg_replace('/\.[^.\s]{3,5}$/', '', $value), $rootLen + 4)));
$filePath = substr($value, 3);
$linkPath = str_replace(" ", "%20", substr(preg_replace('/\.[^.\s]{3,5}$/', '', $value), $pathLen + 3));
if (is_dir($filePath)) {
echo prePad($level) . "<li>" . $linkPath . "</li>n";
dirScanner($filePath, $level + 1, strlen($filePath));
} else {
echo "<li>" . prePad($level) . "<a href="" . $linkPath . "" class="className">" . $displayName . "</a></li>n";
}
}
}
} 

我觉得这些答案应该很简单,所以也许我最近两天一直盯着它看得太多了,或者它已经成为弗兰肯斯坦的代码。

我即将失去反复试验,我需要帮助。

foreach($fileList as $value) {
$displayName = ucwords ( str_replace("-", " ", substr(preg_replace('/\.[^.\s]{3,5}$/', '', $value), $rootLen + 4)));
$filePath = substr($value, 3);
$linkPath = str_replace(" ", "%20", substr(preg_replace('/\.[^.\s]{3,5}$/', '', $value), $pathLen + 3));
if (is_dir($filePath)) {
// Do not close <li> yet, instead, open an <ul>
echo prePad($level) . "<li>" . $linkPath; . "<ul>n";
dirScanner($filePath, $level + 1, strlen($filePath));
// Close <li> and <ul>
echo "</li></ul>n";
} else {
echo "<li>" . prePad($level) . "<a href="" . $linkPath . "" class="className">" . $displayName . "</a></li>n";
}
}

我猜你在调用函数之前打开了 main,并在最后关闭了它。

最新更新