2012-03-15 14 views
6

Zrobiłem kilka wyszukiwania, ale nie mogę znaleźć dokładnej odpowiedzi, której szukam.scandir - sortuj numeryczne nazwy plików

Chciałbym pobrać pliki o numerowanych nazwach plików przy użyciu "scandir ($ dir)", ale należy je odpowiednio sortować. Na przykład, nazwy plików są:

1-something.ext 

2-something-else.ext 

3-a-third-name.ext 

. 

. 

. 

10-another-thing.ext 

11-more-names.ext 

Problem mam jest to, że 10-a-czwartej thing.ext pokaże przed 2-coś-else.ext. Chciałbym znaleźć lepszy sposób rozwiązania tego problemu niż wprowadzenie wiodącego "0" przed wszystkimi nazwami plików.

Jakieś myśli? Dzięki.

Odpowiedz

9

natsort robi dokładnie to, czego potrzebujesz.

sort z SORT_NUMERIC będzie również działać na nazwach rozpoczynających się od cyfr, ale będzie przerwa, jeśli istnieją również nazwy, które nie mają numerów z przodu (wszystkie nazwy non-liczbowo poprzedzone będą sortowane przed liczbowo przedrostek nazwy i ich kolejność względem siebie będzie losowa zamiast alfabetycznej).

1

Można użyć sortowania tak:

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

To był też mój pierwszy impuls, ale są z tym poważne problemy. – Jon

+0

Z PO "Chciałbym pobrać pliki o numerowanych nazwach plików" wydaje się, że nazwy plików zawsze mają numery z przodu. Jednak jeśli są mieszane, to natsort jest drogą do zrobienia. – anubhava

0

Jeśli chcesz zmienić przypisanie klawiszy (która użycia natsort nie robi), użyj usort() w połączeniu z strnatcmp() lub strnatcasecmp():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive