2013-05-18 36 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按日期)給出了各種可能性(尤其是第一條評論中的鏈接,它有一些非常聰明的想法)。您可能需要對每個人進行基準測試,以確定哪個是最快的。 –

+0

你只需要知道哪個文件是最後修改的?如果是這樣,建立一個清單並整理它不是必需的。 – cgTag

+0

可能的重複:http://stackoverflow.com/questions/5448374/get-last-modified-file-in-a-dir – cgTag

回答

0

我懷疑你的「映射」實際上是創建一個哈希表,然後排序不efficiant如人們所期望的那樣,我會嘗試這個辦法:(這是基本的,U可以看上它)

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"); 

//或 //這可能是更好的,如果u只需要這個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"); 
相關問題