列出目录中的所有文件夹(PHP)

3

我该如何让我的代码只显示目录的链接而不是目录中的文件?

$d = dir(".");
echo "<ul>";
while(false !== ($entry = $d->read())) {
    echo "<li><a href='{$entry}'>{$entry}</a></li>";
}
echo "</ul>";
$d->close();

$arr = scandir('dirname'); 然后循环 $arr 并测试 is_dir($item)。 - halojoy
你看过这个吗?https://dev59.com/enE85IYBdhLWcg3w9onw - Don't Panic
寻找更好的通用答案,适用于任意目录,返回一个数组,并且可以递归?请参见https://dev59.com/enE85IYBdhLWcg3w9onw#61168906。 - Theodore R. Smith
3个回答

9
$d = dir(".");

echo "<ul>";

while (false !== ($entry = $d->read()))
{
    if (is_dir($entry) && ($entry != '.') && ($entry != '..'))
        echo "<li><a href='{$entry}'>{$entry}</a></li>";
}

echo "</ul>";

$d->close();

谢谢,这样只输出文件夹而不包括点! - user5352189

2
您只需要在当前代码中添加一个调用is_dir的语句即可:
while(false !== ($entry = $d->read())) {
    if (is_dir($entry)) {
        echo "<li><a href='{$entry}'>{$entry}</a></li>";
    }
}

如果您想删除“点”目录(...),请使用以下命令:

if (is_dir($entry) && !in_array($entry, ['.', '..'])) {
...

谢谢,这个方法非常有效!我使用这个解决方案唯一的问题是,在文件夹下面会出现这些点,这是怎么回事? - user5352189
@Unknown 这些点是另一个“目录”,实际上它是你所在目录的父目录。 - GrumpyCrouton
我明白了!有没有办法从代码中删除它,还是必须使用CSS来删除它? - user5352189
顺便说一下,我喜欢这个平台。回答得超级快,简直是魔法! - user5352189
我已经添加了一种方法来去除这些点。 - iainn

0
只需检查$entry是否为目录:
$d = dir(".");
echo "<ul>";
while(false !== ($entry = $d->read())) {
if(is_dir($entry))
    echo "<li><a href='{$entry}'>{$entry}</a></li>";
}
echo "</ul>";
$d->close();

注意!这段代码可以直接使用点号运行! - user5352189

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接