2011-02-23 47 views
0

我有文件的數組,看起來像這樣:PHP自定義數組按年份和月份文件名排序,最新的第一

array (
    0 => 'scpt-01-2010.phtml', 
    1 => 'scpt-01-2011.phtml', 
    2 => 'scpt-02-2010.phtml', 
    3 => 'scpt-02-2011.phtml', 
    4 => 'scpt-03-2010.phtml', 
    5 => 'scpt-04-2010.phtml', 
    6 => 'scpt-05-2010.phtml', 
    7 => 'scpt-06-2010.phtml', 
    8 => 'scpt-07-2010.phtml', 
    9 => 'scpt-08-2010.phtml', 
    10 => 'scpt-09-2010.phtml', 
    11 => 'scpt-10-2010.phtml', 
    12 => 'scpt-11-2010.phtml', 
    13 => 'scpt-12-2010.phtml', 
); 

我如何排序,使2011個文件首先出現,在順序月(所以它應該帶着scpt-02-2011.phtml)?

我試過主要的排序功能,如natsort,rsort,arsort等,但我沒有得到任何快速!

在此先感謝。

回答

1
function customSort($a, $b) { 
    // extract the values with a simple regular expression 
    preg_match('/scpt-(\d{2})-(\d{4})\.phtml/i', $a, $matches1); 
    preg_match('/scpt-(\d{2})-(\d{4})\.phtml/i', $b, $matches2); 

    // if the years are equal, compare by month 
    if ($matches2[2] == $matches1[2]) { 
     return $matches2[1] - $matches1[1]; 
    // otherwise, compare by year 
    } else { 
     return $matches2[2] - $matches1[2]; 
    } 
} 

// sort the array 
usort($array, 'customSort'); 

該方法使用usort()對數組進行排序,並傳遞比較函數的名稱。

http://php.net/usort

+0

哇,這工作出色,謝謝! – BeesonBison 2011-02-23 17:10:13