按文件创建顺序/修改日期不起作用PHP

时间:2019-02-28 19:48:22

标签: php

对,这真的让我感到沮丧。

当我在下面发布根目录中的index.php文件时,我有3个方向(dir1 / dir2 / dir3)。

每个文件夹中都有一个图像列表,它们会自动命名并放置在每个文件夹中。这些内容显示在一个表中,分为3列,其前还有2列,以显示行数以及每个文件的日期和时间。假定3个目录的第一列由DESC排序,以首先显示最新文件。但是,它以错误的顺序显示日期和时间,例如在顶部显示2月28日(时间),然后在2月28日(时间)显示一个,然后在2月26日(时间)显示两个,然后在28号显示更多! ?在这里应该首先对最新日期进行排序,然后在下面对最旧的日期进行排序。谁能帮忙?

truthy

2 个答案:

答案 0 :(得分:0)

scandir按字母顺序升序或降序。但是您要按上次修改日期排序。因此,您需要对其应用排序功能。例如,您可以使用filemtimeuasort

$items = glob ...
uasort($items, function($a,$b) { return filemtime($a) > filemtime($b); })

filemtime($a) > filemtime($b)翻转为filemtime($a) < filemtime($b)进行asc / desc http://php.net/manual/en/function.scandir.php#refsect1-function.scandir-parameters

答案 1 :(得分:0)

这就是我一直在使用的内容(我已经使用了一段时间的片段):

public function scanLatestFile($directory) {
    // ignore any files that you don't want scanned
    $ignoredFiles = array('.index.php', '.htaccess');

    // Create new array to store the list of files
    $filesToSearch = array();

    // Scan the directory passed in
    foreach (scandir($directory) as $file) {
        if (in_array($file, $ignoredFiles)) continue;

        // Add the filemtime so you can sort it
        $filesToSearch[$file] = filemtime($dir . '/' . $file);
    }

    // Sort by latest file
    arsort($filesToSearch);
    $filesToSearch = array_keys($filesToSearch);

    // Return latest file if it exists
    return ($filesToSearch) ? $filesToSearch : false;
}

这将返回目录中的最新文件,忽略文件也可以排除不需要的任何内容。