在dir中获取文件夹,然后获取其子文件夹

时间:2015-01-21 01:30:46

标签: php

PHP代码:

<?php
    echo '<ul class="DirView"><li><a href="#">Recently Used<span>28</span></a></li>';
    $path = "../Desktop/";
    $dir = new DirectoryIterator($path);
    foreach ($dir as $fileinfo) {
        if ($fileinfo->isDir() && !$fileinfo->isDot()) {
            $subPath = $path.$fileinfo->getFilename();
            $subDir = new DirectoryIterator($subPath);
            echo '<li><a href="#">'.$fileinfo->getFilename().'<span>28</span></a><ul>';
            foreach ($subDir as $subPath) {
                if ($fileinfo->isDir() && !$fileinfo->isDot()) {
                    echo '<li><a href="#">'.$fileinfo->getFilename().'<span>18</span></a><li>';
                }
            }
            echo '</ul></li>';
        }
    }
    echo '</ul>';
?>

问题:

我在while循环中的while循环没有显示子文件夹。

结果如何:

<ul class="DirView">
    <li><a href="#" class="">Recently Used<span>28</span></a>
    </li>
    <li><a href="#" class="active">CSS<span>28</span></a>
        <ul style="display: block;">
            <li><a href="#">CSS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">CSS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">CSS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">CSS<span>18</span></a>
            </li>
            <li></li>
        </ul>
    </li>
    <li><a href="#" class="">JS<span>28</span></a>
        <ul style="display: none;">
            <li><a href="#">JS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">JS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">JS<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">JS<span>18</span></a>
            </li>
            <li></li>
        </ul>
    </li>
    <li><a href="#" class="">IMG<span>28</span></a>
        <ul style="display: none;">
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
            <li><a href="#">IMG<span>18</span></a>
            </li>
            <li></li>
        </ul>
    </li>
</ul>

这看起来完全搞砸我知道但如果你根本不尝试就不会到达任何地方!我之前的工作版本刚刚获得了第一级文件夹;

<?php
    echo '<ul class="DirView">';
    $path = "../Desktop/";
    $dir = new DirectoryIterator($path);
    foreach ($dir as $fileinfo) {
        if ($fileinfo->isDir() && !$fileinfo->isDot()) {
            echo '<li>'.$fileinfo->getFilename().'</li>';
        }
    }
    echo '</ul>';
?>

1 个答案:

答案 0 :(得分:2)

不确定我是否完全100%使用此答案,但您可能在内部foreach循环中误用了变量:

您目前正在使用$fileinfo而不是$subPath,请尝试:

foreach ($subDir as $subPath) {
    if ($subPath->isDir() && !$subPath->isDot()) {
        echo '<li><a href="#">'.$subPath->getFilename().'<span>18</span></a><li>';
    }
}

完整代码

<?php
    echo '<ul class="DirView"><li><a href="#">Recently Used<span>28</span></a></li>';
    $path = "../Desktop/";
    $dir = new DirectoryIterator($path);
    foreach ($dir as $fileinfo) {
        if ($fileinfo->isDir() && !$fileinfo->isDot()) {
            $subPath = $path.$fileinfo->getFilename();
            $subDir = new DirectoryIterator($subPath);
            echo '<li><a href="#">'.$fileinfo->getFilename().'<span>28</span></a><ul>';
            foreach ($subDir as $subPath) {
                if ($subPath->isDir() && !$subPath->isDot()) {
                    echo '<li><a href="#">'.$subPath->getFilename().'<span>18</span></a><li>';
                }
            }
            echo '</ul></li>';
        }
    }
    echo '</ul>';
?>