2013-03-11 141 views
0

我有一堆文件在我的服务器上,文件名从'april2009'到'march2013',每个月之间的文件(加上从现在开始的每个月的新文件将被添加)。文件名列表为日期,按日期排列?

我试着按照'filemtime'的顺序排列,但是这给了一个随机的顺序,因为它们看起来已经在整个地方被修改了。

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

(用PHP获取文件名,但可以使用jQuery或混合用于此目的)

感谢

+0

显而易见的解决方案是:将文件名更改为yyyy-mm-dd而不是您当前的格式,然后按名称排序。但我想这是不可能的? – 2013-03-11 12:46:06

+0

在这里查看接受的答案。正是你需要的。 http://stackoverflow.com/questions/124958/glob-sort-by-date – Ateszki 2013-03-11 12:46:47

+0

它是的,文件名被设置为这样,因为它们正在多个其他地方使用,代码将需要更改以及 – rpsep2 2013-03-11 12:46:52

回答

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); 
+0

谢谢你。我尽管挣扎着:目录文件有一个.html扩展名,我认为这是搞错了strtotime。我使用'substr($ file,0,-5)'来解决这个问题,但是不确定如何在上面的代码中实现这个功能? – rpsep2 2013-03-11 13:11:16

+0

感谢您的确切需求 – rpsep2 2013-03-11 13:41:40

0

说得客气一点,这应该已经快到了文件namning会议之前想过。正如评论中指出的那样,唯一明智的命名约定是可排序的一个yyyy-mm或yyyy-mm-dd。

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

  1. 加载文件名
  2. 名单在加载它们,名称转换为可排序的形式(这样你就变换april2003至200304)
  3. 当你加载它们时,将它们放在$ img [$ sortablefilename] = $真实文件名的数组中(例如$ img ['200304'] ='april2003';)
  4. 使用kso​​rt对结果数组进行排序
  5. 请仔细阅读使用真实文件名显示图像