【发布时间】:2016-03-15 09:56:14
【问题描述】:
我希望我的脚本递归地扫描目录,
$files = scandir('/dir');
foreach($files as $file){
if(is_dir($file)){
echo '<li><label class="tree-toggler nav-header"><i class="fa fa-folder-o"></i>'.$file.'</label>';
$subfiles = scandir($rooturl.'/'.$file);
foreach($subfiles as $subfile){
// and so on and on and on
}
echo '<li>';
} else {
echo $file.'<br />';
}
}
我想以这样一种方式循环这个,对于 scandir 找到的每个目录,它会在该目录中找到的文件夹上运行另一个 scandir,
所以 dir 'A' 包含 dir 1/2/3,它现在应该是 scandir(1)、scandir(2)、scandir(3) 对于找到的每个目录,依此类推。
我怎样才能轻松地实现这一点,而无需在每个 foreach 中一遍又一遍地复制粘贴代码?
编辑:由于答案与我已经尝试过的几乎完全相同,因此我将稍微更新一下问题。
使用这个脚本,我需要创建一个树视图列表。使用当前发布的脚本,会发生以下 get 回显:
/images/dir1/file1.png
/images/dir1/file2.png
/images/dir1/file3.png
/images/anotherfile.php
/data/uploads/avatar.jpg
/data/config.php
index.php
我真正需要的是:
<li><label>images</label>
<ul>
<li><label>dir1</label>
<ul>
<li>file1.png</li>
<li>file2.png</li>
<li>file3.png</li>
</ul>
</li>
<li>anotherfile.php</li>
</ul>
</li>
<li><label>data</label>
<ul>
<li><label>uploads</label>
<ul>
<li>avatar.jpg</li>
</ul>
</li>
<li>config.php</li>
</ul>
</li>
<li>index.php</li>
等等,感谢您已经发布的答案!
【问题讨论】:
-
除了递归编程基础之外,is_dir($file) 应该是 is_dir("/dir/$file")
-
查看
recursiveIterator类套件 - php.net/manual/en/class.recursivedirectoryiterator.php