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

如何使用PHP按最新时间戳对目录文件HTML表格行排序

嘿,这个需求很常见嘛!要让游戏服务器的录制文件按最新的排在最前面,核心就是对文件列表做降序排序,给你两种靠谱的方案,你可以根据自己的实际情况选:

方案一:按文件修改时间排序(简单直接)

如果你的录制文件上传后的修改时间和文件名里的时间戳一致,这个方法最省心,不需要解析文件名,直接用系统的文件修改时间来排序:

// 替换成你的录制文件目录
$recordDir = './server_recordings/';
// 获取目录下所有录制文件(这里假设是.mp4格式,根据你的实际后缀调整)
$files = glob($recordDir . '*.mp4');

// 用usort自定义排序:最新修改的文件排在前面
usort($files, function($fileA, $fileB) {
    // filemtime获取文件最后修改时间的时间戳,用B减A实现降序
    return filemtime($fileB) - filemtime($fileA);
});

// 输出表格(这里保留你原来的时间戳格式化逻辑)
echo '<table border="1">';
echo '<tr><th>文件名</th><th>录制时间</th></tr>';
foreach ($files as $file) {
    $fileName = basename($file);
    // 这里是你原来的时间戳格式化代码,比如从文件名提取并转成"YYYY-MM-DD HH:MM"
    // 举个例子:如果文件名是"rec_201804292045.mp4"
    preg_match('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/', $fileName, $timeParts);
    $formattedTime = $timeParts[1] . '-' . $timeParts[2] . '-' . $timeParts[3] . ' ' . $timeParts[4] . ':' . $timeParts[5];
    
    echo '<tr>';
    echo '<td>' . htmlspecialchars($fileName) . '</td>';
    echo '<td>' . $formattedTime . '</td>';
    echo '</tr>';
}
echo '</table>';

方案二:按文件名中的时间戳排序(精准匹配)

如果文件的修改时间可能和录制时间不一致(比如重新上传过文件),那直接解析文件名里的时间戳来排序更准确:

$recordDir = './server_recordings/';
$files = glob($recordDir . '*.mp4');

// 自定义排序:按文件名里的时间戳降序排列
usort($files, function($fileA, $fileB) {
    $nameA = basename($fileA);
    $nameB = basename($fileB);
    
    // 提取文件名里的时间戳字符串,这里的正则要匹配你的实际文件名格式
    // 比如文件名是"2018-04-29_20-45_server_rec.mp4",正则就改成/(\d{4}-\d{2}-\d{2}_\d{2}-\d{2})/
    preg_match('/(\d{4}\d{2}\d{2}\d{2}\d{2})/', $nameA, $matchA);
    preg_match('/(\d{4}\d{2}\d{2}\d{2}\d{2})/', $nameB, $matchB);
    
    // 处理没有时间戳的异常文件,默认排到最后
    if (empty($matchA) || empty($matchB)) {
        return 1;
    }
    
    // 把时间戳字符串转成整数,方便比较大小
    $timeStampA = (int)$matchA[1];
    $timeStampB = (int)$matchB[1];
    
    // 降序排序,大的时间戳排前面
    return $timeStampB - $timeStampA;
});

// 后面的表格输出和方案一完全一样,直接复用你原来的代码就行

几个小提醒:

  • 一定要根据你的实际文件名格式调整正则表达式,不然提取不到时间戳就白忙活了!
  • 用htmlspecialchars()转义文件名,防止文件名里的特殊字符破坏HTML结构,还能避免XSS风险。
  • 如果目录里有子文件夹,记得加个判断if (is_file($file))过滤掉,只处理文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:45:21