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

PHP使用readdir实现先排序文件夹后排序文件的解决方案

PHP readdir 先输出目录后输出文件实现方案

核心思路

采用两次目录遍历的实现方式,全程不需要将全量目录条目存入数组,内存开销稳定,可支持十万级以上文件的目录处理:

  1. 第一次遍历目录,仅输出父目录标识..和所有子目录
  2. 第二次遍历目录,仅输出所有普通文件

代码实现

// 替换为你的目标目录路径
$targetDir = '/path/to/your/directory';

// 第一次遍历:输出所有目录
if ($dh = opendir($targetDir)) {
    // 按预期输出要求先打印父目录标识
    echo "..\n";
    while (($file = readdir($dh)) !== false) {
        // 跳过默认的.和..
        if ($file === '.' || $file === '..') {
            continue;
        }
        $fullPath = $targetDir . DIRECTORY_SEPARATOR . $file;
        if (is_dir($fullPath)) {
            echo $file . "/\n";
        }
    }
    closedir($dh);
}

// 第二次遍历:输出所有文件
if ($dh = opendir($targetDir)) {
    while (($file = readdir($dh)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        $fullPath = $targetDir . DIRECTORY_SEPARATOR . $file;
        if (is_file($fullPath)) {
            echo $file . "\n";
        }
    }
    closedir($dh);
}

方案优势

  • 内存占用极低:全程仅保存当前遍历的单条文件名,不会随目录下文件数量增长而增加内存消耗,完全适配5万+文件的场景
  • 性能开销可控:两次目录遍历的IO开销远低于全量读取条目后排序的CPU+内存开销,大文件量场景下性能表现更好

可选优化(需要目录/文件内部排序时)

如果需要对目录或者文件列表按名称排序,仅需将对应类别的条目存入单独数组,排序后输出即可,相比全量存储所有条目仍可减少近一半的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:15:01