查找最新文件';PHP中的名称和修改时间

查找最新文件';PHP中的名称和修改时间,php,glob,filemtime,Php,Glob,Filemtime,我使用glob功能搜索一个控制器,并获得匹配的文件列表。然后通过检查文件的filemtime,我创建了一个映射。然后根据文件日期对地图进行排序。最后我得到了最新的文件名和修改时间。我的代码是这样的。它对小目录很有效,但对大目录很慢。我想知道是否有更快/更聪明的方法 $fileList = array(); // $id = is the argument of this function $files = glob('myfolder'.DS.'someone'.$id.'*.txt'); if

我使用
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 );
我怀疑你的“映射”实际上是在创建一个哈希表,然后排序并不像人们期望的那样有效,我会尝试以下方法:(这是基本的,你可以想象一下)

//或 //如果你只需要这样的排列,这可能会更好

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

这个问题()给出了各种可能性(特别是第一条评论中的链接,其中有一些非常聪明的想法)。您可能需要自己对每个文件进行基准测试,以确定哪一个最快。您是否只需要知道最后修改的是哪个文件?如果是,则不需要构建列表并对其进行排序。可能重复:
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");