Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php DirectoryIterator按日期对文件排序_Php_File_Sorting - Fatal编程技术网

php DirectoryIterator按日期对文件排序

php DirectoryIterator按日期对文件排序,php,file,sorting,Php,File,Sorting,我使用php的DirectoryIterator类列出目录中的文件。然而,我无法找到一种按日期对文件排序的简单方法。这是如何使用DirectoryIterator完成的 <?php $dir = new DirectoryIterator('.'); foreach ($dir as $fileinfo) { echo $fileinfo->getFilename() . '<br>'; } ?> 如果我将文件命名为任意_234

我使用php的
DirectoryIterator
类列出目录中的文件。然而,我无法找到一种按日期对文件排序的简单方法。这是如何使用DirectoryIterator完成的

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


如果我将文件命名为任意_2345345345.ext,其中的数字以毫秒为单位表示时间,那么每个文件都有一个唯一的数字。如何通过查看下划线后的数字进行排序如果需要排序,请构建一个数组并对其进行排序

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

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

如果要将结构重新展平为标准阵列,可以使用

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

如果多个文件具有相同的修改时间(更新):


如果您仍然希望访问
directoryinterator
上的所有可用数据(例如
isDot()
getSize()
等),一种可能的方法是将迭代器键存储在要排序的数组上,稍后再查找
directoryinterator

$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>';
}
$sorted_keys=array();
$dir_迭代器=新的DirectoryIterator('.');
foreach($dir\u迭代器作为$fileinfo)
{
$sorted_keys[$fileinfo->getMTime()]=$fileinfo->key();
}
k排序($u键);
/*将'DirectoryIterator'作为排序数组进行迭代*/
foreach($key作为$key排序)
{
$dir_迭代器->搜索($key);
$fileinfo=$dir_迭代器->当前();
/*在此处使用$fileinfo作为普通的DirectoryIterator*/
echo$fileinfo->getFilename()。$fileinfo->getSize()。
; }
我不得不说,你说“存在一个迭代器来做这件事,迭代器”没有什么错。迭代器本质上可以添加过滤和排序功能。实际上,迭代器的目的是提供迭代接口,但是这个定义并没有限制迭代器使用数据执行一些内部工作。你试过了吗。如果我将文件命名为任意_2345345345.ext,其中的数字表示时间,其中每个文件都有一个唯一的数字,该怎么办。我们如何根据后面的数字进行排序underscore@Pinkie:您必须指定问题中的所有假设,然后回答者才会花时间回答您的问题(实际上不包含重要的细节)。这有一个问题,如果有多个文件具有相同的getMTime怎么办?我知道这很难,但不可能impossible@CommaToast我要把它修好。
$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>';
}