如何从含子目录的目录中获取按最新到最旧排序的文件列表
PHP遍历子目录并按修改时间排序文件列表
实现思路
- 递归遍历目标目录下的所有文件(跳过空目录标记)
- 记录每个文件的相对路径与修改时间戳
- 按修改时间戳从大到小排序(最新文件在前)
- 整理成
folder/file格式的最终数组
代码实现
<?php $targetDir = 'MainFolder'; $fileData = []; // 初始化递归目录迭代器,跳过.和..目录 $dirIterator = new RecursiveDirectoryIterator( $targetDir, RecursiveDirectoryIterator::SKIP_DOTS ); $recursiveIterator = new RecursiveIteratorIterator($dirIterator); // 遍历所有文件,收集路径与修改时间 foreach ($recursiveIterator as $file) { if ($file->isFile()) { // 生成相对于目标目录的路径,统一替换为/分隔符 $relativePath = substr($file->getPathname(), strlen($targetDir) + 1); $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', $relativePath); $fileData[] = [ 'path' => $relativePath, 'mtime' => $file->getMTime() ]; } } // 按修改时间降序排序 usort($fileData, function($a, $b) { return $b['mtime'] - $a['mtime']; }); // 提取最终的路径数组 $result = array_column($fileData, 'path'); // 输出结果 print_r($result); ?>
关键说明
RecursiveDirectoryIterator+RecursiveIteratorIterator组合实现子目录的递归遍历,无需手动写递归函数getMTime()获取文件的修改时间戳,是排序的核心依据usort()自定义排序规则,确保最新修改的文件排在数组最前面- 统一使用
/作为路径分隔符,保证输出格式符合要求
内容的提问来源于stack exchange,提问作者JohnB17
相关产品推荐
相关产品推荐

