时间:2021-07-01 10:21:17 帮助过:3人阅读
- <code>function my_scandir($file){
- if($f = opendir($file)){
- while($r = readdir($f)){
- if($r != '..' && $r != '.'){
- $c = $file.'/'.$r;
- if(is_dir($c)){
- echo $r.'<br>';
- my_scandir($c);
- }else{
- echo $r.'<br>';
- }
- }
- }
- }
- }
- my_scandir('clone2');</code>
前台输出为
public
admin.php
css
admin.css
style.css
view.php
sys
class.admin.php
我想要这样的效果
public
-admin.php
-css
--admin.css
--style.css
view.php
sys
-class.admin.php
如何修改代码?
- <code>function my_scandir($file){
- if($f = opendir($file)){
- while($r = readdir($f)){
- if($r != '..' && $r != '.'){
- $c = $file.'/'.$r;
- if(is_dir($c)){
- echo $r.'<br>';
- my_scandir($c);
- }else{
- echo $r.'<br>';
- }
- }
- }
- }
- }
- my_scandir('clone2');</code>
前台输出为
public
admin.php
css
admin.css
style.css
view.php
sys
class.admin.php
我想要这样的效果
public
-admin.php
-css
--admin.css
--style.css
view.php
sys
-class.admin.php
如何修改代码?
增加一个参数$depth,默认值0。
文件名之前输出$depth个减号。
然后每次递归时就把$depth加1再调用。
普通写法:
- <code>function read_dir_content($parent_dir, $depth = 0){
- $str_result = "";
- $str_result .= "<li>". dirname($parent_dir) ."</li>";
- $str_result .= "<ul>";
- if ($handle = opendir($parent_dir))
- {
- while (false !== ($file = readdir($handle)))
- {
- if(in_array($file, array('.', '..'))) continue;
- if( is_dir($parent_dir . "/" . $file) ){
- $str_result .= "<li>" . read_dir_content($parent_dir . "/" . $file, $depth++) . "</li>";
- }
- $str_result .= "<li>{$file}</li>";
- }
- closedir($handle);
- }
- $str_result .= "</ul>";
- return $str_result;
- }
- echo "<ul>" . read_dir_content("/folder") . "</ul>";
- </code>
如果你的php > 5.31:
- <code>function iterateDirectory($i)
- {
- echo '<ul>';
- foreach ($i as $path) {
- if ($path->isDir())
- {
- echo '<li>';
- iterateDirectory($path);
- echo '</li>';
- }
- else
- {
- echo '<li>'.$path.'</li>';
- }
- }
- echo '</ul>';
- }
- $dir = '/folder';
- $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
- iterateDirectory($iterator);</code>