Сортировать по имени с глобусом (..., GLOB_BRACE) - PullRequest
0 голосов
/ 22 сентября 2019

Допустим, у меня есть эти файлы в текущей папке:

a.txt
b.txtbis
c.txt
+ other files with other extensions

Я хочу перечислить .txt и .txtbis файлы в одном списке с PHP glob, и я хочу получить результатбыть отсортированным по имени файла.К сожалению:

  • glob("*.{txtbis,txt}", GLOB_BRACE) дает Array ( [0] => b.txtbis [1] => a.txt [2] => c.txt )

  • glob("*.{txt,txtbis}", GLOB_BRACE) дает Array ( [0] => a.txt [1] => c.txt [2] => b.txtbis )

Ни один из них не отсортирован должным образом.

Как отсортировать список по имени файла при использовании фигурных скобок в glob?

1 Ответ

1 голос
/ 23 сентября 2019

Glob сортирует файлы по полному пути (путь + имя + расширение) в алфавитном порядке.Если вы хотите отсортировать только по (базовому) имени, вы можете использовать usort:

$files = glob("*.{txtbis,txt}", GLOB_BRACE);

usort(
  $files, 
  function($a,$b){
    return basename($a) <=> basename($b);
  }
);

var_dump($files);
...