scandir - сортировка числовых имен файлов - PullRequest
7 голосов
/ 16 марта 2012

Закончил поиск, но не могу найти точного ответа, который искал.

Я хотел бы извлекать файлы с пронумерованными именами файлов, используя 'scandir ($ dir)', но чтобы они сортировались правильно.Например, имена файлов:

1-something.ext

2-something-else.ext

3-a-third-name.ext

.

.

.

10-another-thing.ext

11-more-names.ext

Проблема, с которой я столкнулся, заключается в том, что файл 10-a-четвертый thing.ext будет отображаться до 2-кое-чего еще.Я бы хотел найти лучший способ решения этой проблемы, чем вводить «0» перед всеми именами файлов.

Есть мысли?Спасибо.

Ответы [ 3 ]

12 голосов
/ 16 марта 2012

natsort делает именно то, что вам нужно.

sort с SORT_NUMERIC также будет работать с именами файлов, которые начинаются с цифр, но прервется, если будут также именаперед ними нет чисел (все имена без префикса будут отсортированы перед именами с префиксом, и их порядок относительно друг друга будет случайным, а не буквенным).

1 голос
/ 26 марта 2012

Если вы хотите переназначить ключи (что natsort не делает), используйте usort () в сочетании с strnatcmp () или strnatcasecmp ():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive
1 голос
/ 16 марта 2012

Вы можете использовать сортировку следующим образом:

sort($arr, SORT_NUMERIC); // asuming $arr is your array
...