You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现相册分类目录中子文件夹数量统计

解决循环内统计子目录数量的问题

可以通过自定义函数实现循环内的子文件夹统计,以下是具体方案:

1. 编写统计子目录的函数

先写一个专门的函数,用来统计指定目录下符合要求的子文件夹数量:

function countSubdirectories($dir, $blacklist) {
    $count = 0;
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false) {
            // 跳过黑名单项,仅统计目录
            if (!in_array($file, $blacklist) && is_dir($dir . '/' . $file)) {
                $count++;
            }
        }
        closedir($handle);
    }
    return $count;
}

2. 在原有循环中调用函数

把你代码里的**COUNT NUMBER CODE GOES HERE**替换成函数调用,复用已有的黑名单数组即可:

$blacklist = array('.', '..', 'somedir', 'somefile.php', 'index.php');

// 定义统计函数
function countSubdirectories($dir, $blacklist) {
    $count = 0;
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false) {
            if (!in_array($file, $blacklist) && is_dir($dir . '/' . $file)) {
                $count++;
            }
        }
        closedir($handle);
    }
    return $count;
}

if( $handle = opendir('.') ) {
    while( ($file = readdir($handle)) !== false ) {
        if (!in_array($file, $blacklist)) { 
            // 调用函数统计当前目录的子文件夹数量
            $subDirCount = countSubdirectories($file, $blacklist);
            
            echo "<div class='catrow'>";
            echo "<span class='catlink'>";
            echo "<i class='fa-solid fa-star'></i>";
            echo "<a href='$file'>" . preg_replace('/_/', ' ', $file) . "</a>";
            echo "</span>";
            echo "&rarr; This category has <b>" . $subDirCount . "</b> albums";
            echo "</div>";
        }
    } 
    closedir ($handle);
}

可选:递归统计所有层级子目录

如果需要统计目录下所有层级的子文件夹(不只是直接子目录),可以改用递归版本的函数:

function countSubdirectoriesRecursive($dir, $blacklist) {
    $count = 0;
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false) {
            if (!in_array($file, $blacklist)) {
                $fullPath = $dir . '/' . $file;
                if (is_dir($fullPath)) {
                    $count++;
                    // 递归统计子目录内的文件夹
                    $count += countSubdirectoriesRecursive($fullPath, $blacklist);
                }
            }
        }
        closedir($handle);
    }
    return $count;
}

之后把循环里的函数调用换成这个递归函数即可。

内容的提问来源于stack exchange,提问作者user23556208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:55:14