过滤scandir并按日期排序

swi*_*itz 3 php

  1. 我需要将文件放在数组中的目录中.
    • 只有以.markdown结尾的文件
  2. 文件应按创建日期排序

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

我知道我使用该scandir函数将文件转换为数组,但我不知道从那里去哪里.我可以把它扔进一个循环来检查文件是否结束.markdown,但是我可以传入扫描的某种正则表达式吗?

谢谢

Tim*_*per 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;
});
Run Code Online (Sandbox Code Playgroud)

对于低于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');
Run Code Online (Sandbox Code Playgroud)