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

PHP按日期、时间、名称排序scandir返回的文件夹列表

解决方案

核心思路

用PHP的usort()自定义排序规则,从每个文件夹名称里提取日期、时间、名称三个关键信息,把日期转成时间戳后按「日期→时间→名称字母」的优先级依次比较排序。

实现代码

<?php
$targetDir = './your-folder-path'; // 替换成你的目标目录
$dirItems = scandir($targetDir);

// 筛选出真正的子文件夹,排除.和..
$folders = array_filter($dirItems, function($item) use ($targetDir) {
    $fullPath = $targetDir . DIRECTORY_SEPARATOR . $item;
    return is_dir($fullPath) && $item !== '.' && $item !== '..';
});

// 自定义排序逻辑
usort($folders, function($folderA, $folderB) {
    $infoA = parseFolderInfo($folderA);
    $infoB = parseFolderInfo($folderB);

    // 先比日期(时间戳越大越新)
    if ($infoA['timestamp'] !== $infoB['timestamp']) {
        return $infoA['timestamp'] < $infoB['timestamp'] ? -1 : 1;
    }

    // 日期相同比时间
    if ($infoA['time'] !== $infoB['time']) {
        return strcmp($infoA['time'], $infoB['time']);
    }

    // 时间相同比名称字母顺序
    return strcmp($infoA['name'], $infoB['name']);
});

// 解析文件夹名称的辅助函数
function parseFolderInfo($folderName) {
    $segments = explode(' - ', $folderName);
    $name = $segments[0];
    $time = '';
    $dateStr = '';

    // 判断是哪种命名格式
    if (count($segments) === 3) {
        // 格式:名称 - 时:分 - 日/月/年
        $time = $segments[1];
        $dateStr = str_replace('/', '-', $segments[2]); // 替换分隔符让strtotime能识别
    } elseif (count($segments) === 4) {
        // 格式:名称 - 手机号 - 时:分 - 日-月-年
        $time = $segments[2];
        $dateStr = $segments[3];
    }

    // 拼接成完整时间字符串,转成时间戳
    $fullTime = $dateStr . ' ' . $time;
    $timestamp = strtotime($fullTime);

    return [
        'name' => $name,
        'time' => $time,
        'timestamp' => $timestamp
    ];
}

// 输出排序后的结果
print_r($folders);
?>

关键说明

  • 文件夹筛选:用array_filter过滤掉非文件夹的项和系统默认的.、..目录。
  • 名称解析:通过explode(' - ', $folderName)拆分名称,根据拆分后的片段数量判断格式,提取对应的字段;把日期的/替换成-是为了让strtotime能正确解析日期格式。
  • 排序优先级:先按日期时间戳排序(确保新日期在后),日期相同则比较时分字符串,最后比较名称的字母顺序(用strcmp做标准字符串比较)。

注意点

  • 如果有不符合两种格式的文件夹,strtotime会返回false,这类文件夹会排在最前面,你可以在解析函数里加判断处理这类情况。
  • 如果你的日期格式不是日/月/年或日-月-年,需要调整解析逻辑来适配。

内容的提问来源于stack exchange,提问作者Joao Pedro Baza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:12:16