过滤scandir并按创建日期排序


filter scandir and sort by date created

  1. 我需要获取数组中某个目录中的文件。
    • 仅限以.markdown结尾的文件
  2. 文件应按创建日期排序

效率不是一个巨大的交易,但我总是喜欢让事情尽可能高效。将有多个目录,每个目录中最多有几百个文件。

我知道我使用scandir函数将文件放入一个数组中,但我不确定该从哪里开始。我可以将其放入循环中,检查文件是否以.markdown结尾,但是否有某种regex可以传递给扫描?

感谢

您可以使用glob()获取文件名数组,然后使用usort()filectime()按创建日期排序:

$files = glob('*.markdown');
usort($files, function($file_1, $file_2)
{
    $file_1 = filectime($file_1);
    $file_2 = filectime($file_2);
    if($file_1 == $file_2)
    {
        return 0;
    }
    return $file_1 < $file_2 ? 1 : -1;
});

对于5.3以下的PHP版本:

function sortByCreationTime($file_1, $file_2)
{
    $file_1 = filectime($file_1);
    $file_2 = filectime($file_2);
    if($file_1 == $file_2)
    {
        return 0;
    }
    return $file_1 < $file_2 ? 1 : -1;
}
$files = glob('*.markdown');
usort($files, 'sortByCreationTime');

获取文件列表的最简单方法就是进行

$files = glob('*.markdown');

glob((基本上执行与shell提示相同的通配符匹配。

按日期排序将要求您查看每个具有stat()的文件,并检索其mtime/ctime/atime值(fileatime((、filemtime((和filectime((直接返回,但仍在内部使用stat(((。