Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Отсортировать список файлов по 2-м критериям


Автор: maximus666 30.12.2007, 21:31
Подскажите наиболее простой и быстрый (или просто быстрый) способ сканирования (получения списка файлов из опр дириктории), причем список должен быть отсортирован как по имени так и по дате модификации.
Очень нужно!
Заранее спасибо!

Автор: WolfON 30.12.2007, 21:54
http://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

Автор: skyboy 30.12.2007, 22:33
сортировка есть(http://php.net/usort, к примеру), не думаю, что медленная.
тут скорее проблема в ускорении получения не только имени файла(полученного при помощи, скажем, http://php.net/readdir), сколько в получении времени модификации(http://php.net/filemtime), чтоб процесс проходил достаточно быстро.
а там уже пихаем данные в массив, каждый элемент котого - ассоциативный массив с именем и датой модификации. потом уже пишем функцию, которую будем использовать для сравнения двух таких массив-структур и используем usort.
Код

function compare_two_file_records($first, $second) {
 if(!is_array($first) OR !is_array($second) OR !isset($first['change_time']) OR !isset($second['change_time']))
 die('incorrect file-record values!');
 else {
  if($first['change_time'] == $second['change_time']) 
   return $first['name']> $second['name']? -1: 1;
  else
   return $first['change_time']> $second['change_time']? -1: 1;
 }
}

define('TARGET_DIR','/some/my/files/');
$files= array();
while(($nextfile= readdir(TARGET_DIR)) !== false) {
 $files[]= array('name'=> $nextfile, 'change_time'=> filemtime($nextfile));
}
usort($files,'compare_two_file_records');


Добавлено через 1 минуту и 24 секунды
Цитата(maximus666 @  30.12.2007,  20:31 Найти цитируемый пост)
причем список должен быть отсортирован как по имени так и по дате модификации.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)