2013-03-11 138 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. 請仔細閱讀使用真實文件名顯示圖像