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

如何从含子目录的目录中获取按最新到最旧排序的文件列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:30:54