如何使用Symfony Finder组件按DESC顺序对文件进行排序?

Vic*_*sky 5 php symfony symfony-components symfony-finder

默认情况下,Symfony Finder组件ASC顺序对文件进行排序.

//sorting by ASC order
$finder->files()->in($this->getDumpPath())->sortByModifiedTime();
Run Code Online (Sandbox Code Playgroud)

我怎样才能按文件排序DESC

Yan*_*oné 11

您可以使用sort方法并给出自己的排序匿名函数(请参阅参考资料Symfony\Component\Finder\Iterator\SortableIterator)

$finder->sort(function ($a, $b) { return strcmp($b->getRealpath(), $a->getRealpath()); });
Run Code Online (Sandbox Code Playgroud)

这都是关于排序技巧.这种工作总是一样的.请查看usort功能.

更确切地说,我只是从中获取代码snipet Symfony\Component\Finder\Iterator\SortableIterator,并且我已经恢复了返回条件.


小智 6

在Symfony\Component\Finder\Iterator\SortableIterator中,您可以看到ASC案例,因此DESC案例是:

$finder->files()->in($this->getDumpPath())->sort(
    function ($a, $b) {
       return ($b->getMTime() - $a->getMTime());
    }
);
Run Code Online (Sandbox Code Playgroud)


Ste*_*ORT 5

Symfony 4.2 中引入的reverseSorting方法现在可以使用了。

$finder = new Finder();
$finder->sortByModifiedTime();
$finder->reverseSorting();
$finder->files()->in( $directoryPath );

foreach ($finder as $file) {
  // log each modification time for example 
  // $this->logger->debug ( \date('d/m/Y H:i', $file->getMTime()) );
}
Run Code Online (Sandbox Code Playgroud)

Github 提交