0

我搜索具有glob功能的导演并获得匹配的文件列表。然后通过检查filemtime文件我创建了一个地图。然后根据文件日期对地图进行排序。最后我得到了最新的文件名和修改时间。我的代码是这样的。它适用于小目录,但对于大目录来说很慢。我想知道是否有更快/更聪明的方法?

$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 );
4

1 回答 1

0

我怀疑你的“映射”实际上是在创建一个哈希表,然后排序不像人们期望的那样高效,我会试试这个:(这是基本的,你可以想象它)

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

// 或 // 如果你只需要这种特殊的排序,这可能会更好

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");
于 2013-05-18T21:12:29.713 回答