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 "→ 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
相关产品推荐
相关产品推荐

