0

ディレクトリからファイルを動的にロードし、月順に並べ替えようとしています。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 の使用方法に問題があると考えています。

4

2 に答える 2

0

関数filectimeを使用します。UNIX では、この関数はファイルの最終変更時刻の日付を返します (ただし、Windows ではファイルの作成時刻が返されるので注意してください)。この機能を使用して、ファイルが変更された時期に基づいてファイルを並べ替えることができます。これは、メモを取るテキストで機能します。

于 2012-06-12T17:17:36.770 に答える
0

ファイル名をUNIX タイムスタンプに変換して、それでソートするのはどうですか? このような:

$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"
 }
于 2012-06-12T21:21:22.903 に答える