过滤scandir并按日期排序

时间:2011-11-17 14:34:15

标签: php

  1. 我需要将文件放在数组的目录中。
    • 仅限以.markdown结尾的文件
  2. 文件应按创建日期排序
  3. 效率不是巨大的交易,但我总是希望尽可能提高效率。将有多个目录,每个目录中最多有几百个文件。

    我知道我使用scandir函数将文件放入数组中,但我不确定从那里开始。我可以把它放在一个循环中来检查文件是否以.markdown结尾,但是我可以传入某种正则表达式进行扫描吗?

    由于

2 个答案:

答案 0 :(得分:9)

您可以使用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');

答案 1 :(得分:0)

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

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

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

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