基本上我要做的是获取一个基本目录(已经定义)并递归下去,在导航栏中创建文件链接和目录的可折叠;在collapsible下,将是该目录中文件的链接,并且可能是目录内目录的更多可折叠内容。以下是我到目前为止所做的工作:
foreach (new DirectoryIterator($dir) as $file) {
if ($file->isDot()) continue;
if ($file->isFile()) {
echo "<li><a href=\"#!\">" . $file . "</a></li>"; /*This successfully
creates links named from all the files in the directory specified by $dir */
}
if ($file->isDir()) {
?>
<li class="no-padding">
<ul class="collapsible collapsible-accordion">
<li>
<a class="collapsible-header"><?php echo $file->getFilename(); ?></a>
<div class="collapsible-body">
<ul>
<?php
$dir2 = $file->getFilename();
foreach (new DirectoryIterator($dir."/".$dir2) as $file1) {
if ($file1->isDot()) continue;
if ($file1->isFile()) {
echo "<li><a href='#' class=\"mui-btn mui-btn-primary waves-effect waves-teal\">".$file1 . "</a></li>"; }
} ?>
</ul>
</div>
</li>
</ul>
</li>
<?php
}
}
?>
但是,出于某种原因,似乎DirectoryIterator中的DirectoryIterator不好($ dir2用于测试目的)。或者我可能有语法问题。我希望这种方式工作的原因是因为我希望文件包含在<li><a href="#!">file</a></li>
html中,目录下的文件必须是<li><a href='#' class="mui-btn mui-btn-primary waves-effect waves-teal">file-in-folder</a></li>
格式。
如果有更好的方法,请告诉我!谢谢!
编辑:我将$ 1file更改为$ file1,它工作正常,甚至附加了dir;但是,我基本上想要一个类似for循环的东西,如果仍然存在目录,它将继续在彼此之间创建可折叠的东西。基本上如果有的话,它会自动创建格式:
Dir1 (main) >
File 1 //link
File 2 //link
Dir 1 > //collapsible header
File 1.1 //collapsible button
File 1.2 //...
Dir 2 >
File 2.1
File 2.2
Dir 3
没有我必须编写10个嵌套的DirectoryIterator,以防万一你可以走得那么远。
答案 0 :(得分:0)
我认为您使用的是无效的变量名称。 PHP接受以字母和下划线开头的变量,后跟其他字符。尝试$ file1而不是$ 1file 干杯! http://php.net/manual/en/language.variables.basics.php
答案 1 :(得分:0)
这是我的逻辑,也许你可以从这里得到一些想法。
如果您的主文件夹看起来像这样
然后这是获取文件夹结构的代码。
echo '<pre>';
$dir='folders';
$files = array_slice(scandir($dir), 2);
foreach($files as $k=>$file){
$dir1=$dir.'/'.$file;
if(is_dir($dir1)){
$files1 = array_slice(scandir($dir1), 2);
if(!$files1){
$FOLDERS[$file]=$file;
}else{
foreach($files1 as $kk=>$file1){
$dir2=$dir1.'/'.$file1;
$files2 = array_slice(scandir($dir2), 2);
if(!$files2){
$FOLDERS[$file][$file1]=$file1;
}else{
foreach($files2 as $file2){
$FOLDERS[$file][$file1][$file2]=$file2;
}
}
}
}
}
}
print_r($FOLDERS);
<强>输出:强>
Array
(
[folder1] => folder1
[folder2] => Array
(
[folder3] => Array
(
[folder4] => folder4
)
[folder5] => folder5
[folder6] => folder6
)
)
我只用它来扫描文件夹,你可以根据需要扩展它。