我使用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 );
答案 0 :(得分: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");