0

我的服务器上有一堆文件,文件名从“april2009”到“march2013”​​,中间每个月都有一个文件(从现在开始每个月都会添加一个新文件)。

我尝试使用“filemtime”按顺序排列,但这给出了一个随机顺序,因为它们似乎已在各处进行了修改。

如何对文件名进行排序并按顺序排列,从最近的第一个开始?

(使用 php 获取文件名,但可以为此使用 jquery 或混合使用)

谢谢

4

2 回答 2

1

strtotime日期转换很棒

检索文件列表后,您可以执行以下操作:

$date = strtotime('april2003');

这会给你:1049155200。意思是:

2003 年 1 月 4 日至 2:00:00

一旦你有了你的时间戳,你就可以做任何你想做的事情。

这是一个 POC:

$dirs = array();
if ($handle = opendir('/path/to/dir')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != ".." && is_dir($entry)) {
            $dirs[strtotime(substr($entry, 0, -5))] = $entry;
        }
    }
    closedir($handle);
}

krsort($dirs);
于 2013-03-11T12:44:54.537 回答
0

说得委婉一点,在提出文件命名约定之前应该考虑到这一点。正如评论中所指出的,唯一合理的命名约定是可排序的 yyyy-mm 或 yyyy-mm-dd。

在这种情况下,您唯一的选择是:

  1. 加载文件名列表
  2. 加载它们时,将名称转换为可排序的形式(因此您可以将 april2003 转换为 200304)
  3. 当您加载它们时,将它们放在 $img[$sortablefilename] = $real 文件名形式的数组中(例如 $img['200304'] = 'april2003';)
  4. 使用 ksort 对结果数组进行排序
  5. 使用真实文件名读取排序数组以显示图像
于 2013-03-11T13:01:39.180 回答