2013-05-18 2 views
0

Я ищу директора с функцией glob и получаю список совпадающих файлов. Затем, проверив filemtime файлов, я создаю карту. Затем отсортируйте карту относительно дат файла. Наконец, я получаю имя последнего файла и время модификации. Мой код такой. Он хорошо работает для небольших каталогов, но для больших каталогов он медленный. Интересно, есть ли более быстрый/умный способ?Поиск последнего имени файла и времени модификации в PHP

$fileList = array(); 
// $id = is the argument of this function 
$files = glob('myfolder'.DS.'someone'.$id.'*.txt'); 
if (empty($files)) { 
    return 0; 
} 
foreach ($files as $file) { 
    $fileList[filemtime($file)] = $file; 
} 

if (sizeof($files) > 1) { 
    ksort($fileList); 
} 

$latestFilename = end($fileList); 
$fileLastModifDate = filemtime($latestFilename); 
+0

этот вопрос (http://stackoverflow.com/questions/124958/glob-sort по дате) дает различные возможности (esp ссылку в первом комментарии, который имеет некоторые очень умные идеи). Вам, вероятно, придется оценивать каждый самостоятельно, чтобы определить, какой из них был самым быстрым. –

+0

Вам нужно только знать, какой файл является последним измененным? Если это так, создание списка и сортировка его не требуется. – cgTag

+0

Возможный дубликат: http://stackoverflow.com/questions/5448374/get-last-modified-file-in-a-dir – cgTag

ответ

0

я подозреваю, что ваше «отображение» фактически создает хэш-таблицу, а затем сортировать не efficiant как и следовало ожидать, я хотел бы попробовать это: (это основное, у воображает его)

class file_data 
{ 
    public $time; // or whatever u use 
    public $file; 
} 

$arr =new array(); 
foreach ($files as $file) { 
    $new_file = new file_data(); 
    $file_data->time = filetime($file); 
    $file_data->file = $file; 
    array_push ($arr,$file_data); 
} 

function file_object_compare ($a,$b) 
{ 
    if ($a->time > $b->time) return -1; 
// etc... i.e 0 eual 1 otherwise 

} 

//and then u sort 
usort ($arr,"file_object_compare"); 

// или // и это, вероятно, лучше, если и только нужен этот paricular сортировки

function file_object_compare ($a,$b) 
{ 
    if (filetime($a)> filetime($b)) return -1; 
// etc... i.e 0 eual 1 otherwise  
} 

usort ($files,"file_object_compare"); 
Смежные вопросы