Skip to content

[Finder] Sort works per directory when multiple directories are given #34879

Closed
@flip111

Description

@flip111

symfony 5

<?php

use Symfony\Component\Finder\Finder;

require_once getenv()['APPDATA'] . '/Composer/vendor/autoload.php';

function makeEmptyFile(string $path, int $size) {
  $fp = fopen($path, 'w');
  fseek($fp, $size-1, SEEK_CUR);
  fwrite($fp,'a');
  fclose($fp);
}

function createDir(string $path) {
  if (! file_exists($path)) {
    mkdir($path);
  }
}

$tmp = getenv()['TEMP'];

createDir($tmp . '/finder');
createDir($tmp . '/finder/1');
createDir($tmp . '/finder/2');

makeEmptyFile($tmp . '/finder/1/a', 30);
makeEmptyFile($tmp . '/finder/1/b', 10);
makeEmptyFile($tmp . '/finder/2/c', 20);
makeEmptyFile($tmp . '/finder/2/d', 40);

$finder = new Finder();

$finder->files()
  ->in($tmp . '/finder/1')
  ->in($tmp . '/finder/2')
  ->sort(function (\SplFileInfo $a, \SplFileInfo $b) {
    return ($a->getSize() <=> $b->getSize());
  });

foreach ($finder as $file) {
  dump($file->getRealPath());
}

result

^ "C:\Users\flip111\AppData\Local\Temp\finder\1\b"
^ "C:\Users\flip111\AppData\Local\Temp\finder\1\a"
^ "C:\Users\flip111\AppData\Local\Temp\finder\2\c"
^ "C:\Users\flip111\AppData\Local\Temp\finder\2\d"

expected result

^ "C:\Users\flip111\AppData\Local\Temp\finder\1\b"
^ "C:\Users\flip111\AppData\Local\Temp\finder\2\c"
^ "C:\Users\flip111\AppData\Local\Temp\finder\1\a"
^ "C:\Users\flip111\AppData\Local\Temp\finder\2\d"

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions