排序动态拉取文件

时间:2012-06-12 17:09:26

标签: php arrays sorting usort

我正在尝试从目录中动态加载文件,然后按月按顺序对它们进行排序。从7月开始,然后到6月。

这是我到目前为止所拥有的 -

function monthCompare($a, $b) {
    $a = strtolower($a);
    $b = strtolower($b);
    $months = array(
        'July' => 1,
        'August' => 2,
        'September' => 3,
        'October' => 4,
        'November' => 5,
        'December' => 6,
        'January' => 7,
        'February' => 8,
        'March' => 9,
        'April' => 10,
        'May' => 11,
        'June' =>12,

    );

    if($a == $b)
        return 0;

    if(!isset($months[$a]) || !isset($months[$b]))
        return $a > $b;

    return ($months[$a] > $months[$b]) ? 1 : -1;

}

usort($filearray, "monthCompare");  

以下是我认为无效的代码。

由于

  1. 这些文件是分钟,其名称格式为“月 - 日 - 年”

  2. 任何人都可以随时修改这些文件

  3. 他认为使用函数usort的方式存在问题

2 个答案:

答案 0 :(得分:0)

使用功能filectime。在unix上,这个函数会返回文件最后修改时间的日期(虽然因为在windows上这会给你回复文件创建时间)。您可以使用此功能根据文件的修改时间对文件进行排序。

答案 1 :(得分:0)

如何将文件名转换为unix timestamps并按此排序?像这样:

$files = array('january-25-2012.pdf', 'february-2-2012.pdf');
$sorted_array = array();

foreach($files as $key => $file) {
   $name = explode(".", $file);
   $nix_date = strtotime($name[0]); // turn to unix timestamp
   $sorted_array[$nix_date] = $name[0];
}
// sort by keys
ksort($sorted_array);

将导致:

 array(2) {
   [1327522320] => string(15) "january-25-2012"
   [1328213520] => string(15) "february-2-2012"
 }