php 目录按日期对文件进行排序

2022-08-30 22:01:11

我正在使用php的类来列出目录中的文件。但是,我无法找到一种按日期对文件进行排序的简单方法。如何使用 DirectoryIterator 完成此操作DirectoryIterator

<?php
 $dir = new DirectoryIterator('.');
  foreach ($dir as $fileinfo) {     
     echo $fileinfo->getFilename() . '<br>';
   }
?>

如果我将我的文件命名为whatever_2342345345.ext,其中数字表示以毫秒为单位的时间,因此每个文件都有一个唯一的数字,该怎么办?我们如何通过查看下划线后的数字进行排序


答案 1

如果需要排序,请构建一个数组并对其进行排序。

$files = array();
$dir = new DirectoryIterator('.');
foreach ($dir as $fileinfo) {     
   $files[$fileinfo->getMTime()][] = $fileinfo->getFilename();
}

ksort($files);

这将构建一个数组,其中修改时间作为键,一个文件名数组作为值。然后,它通过ksort()进行排序,ksort()将按修改时间的顺序为您提供文件名。

然后,如果要将结构重新平展为标准数组,可以使用...

$files = call_user_func_array('array_merge', $files);

答案 2

如果您仍然想访问所有可用的数据(例如 etc)一种可能的方法是将迭代器密钥存储在要排序的数组上,并寻求后者。DirectoryIteratorisDot()getSize()DirectoryIterator

$sorted_keys = array();
$dir_iterator = new DirectoryIterator('.');

foreach ( $dir_iterator as $fileinfo )
{
    $sorted_keys[$fileinfo->getMTime()] = $fileinfo->key();
}

ksort($sorted_keys);

/* Iterate `DirectoryIterator` as a sorted array */
foreach ( $sorted_keys as $key ) 
{
    $dir_iterator->seek($key);
    $fileinfo = $dir_iterator->current();

    /* Use $fileinfo here as a normal DirectoryIterator */
    echo $fileinfo->getFilename() . '  ' . $fileinfo->getSize() . '<br>';
}

推荐