2012-06-12 3 views
0

Я пытаюсь динамически загружать файлы из каталога, а затем сортировать их по порядку по их месяцу. Начиная с июля, а затем в июне.сортировка динамически выталкиваемых файлов

Вот то, что я до сих пор -

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

+0

В чем проблема? –

+0

Не работает. он просто сортирует их по алфавиту –

+0

Как насчет сужения проблемы чуть-чуть для нас? – hakre

ответ

0

Используйте функцию filectime. В unix эта функция вернет вам дату последнего времени изменения файла (осторожно, хотя, поскольку в окнах это вернет вам время создания файла). Вы можете использовать эту функцию для сортировки файлов в зависимости от того, когда они будут изменены, что будет работать для ваших заметок.

+0

Я не знаю, является ли это огнестойким. Что делать, если некоторые изменения будут сделаны через год или что-то еще. Я думаю, что мне нужно сделать это на имена файлов. –

+0

Ну, тогда вам нужно быть более конкретным. Люди возвращаются и редактируют минуты? Как хранятся ваши имена файлов? Какая часть вашего кода, по вашему мнению, не работает? Это все вопросы, на которые вы должны ответить, указав начальный вопрос. –

+0

Они могут вернуться к редактированию минут. Я хочу убедиться, что они могут и не испортить сортировку. Мои файлы хранятся так: август-16-2010.pdf. Я думаю, что это функция monthCompare, а затем также команда usort, которая не работает –

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" 
} 
Смежные вопросы