Question

Done some searching, but can't seem to find the exact answer I'm looking for.

I'd like to pull in files with numbered filenames using 'scandir($dir)', but have them sort properly. For example, file names are:

1-something.ext

2-something-else.ext

3-a-third-name.ext

.

.

.

10-another-thing.ext

11-more-names.ext

The problem I'm having is that 10-a-fourth-thing.ext will show before 2-something-else.ext. I'd like to find a better way of solving this issue than introducing leading '0' in front of all file names.

Any thoughts? Thanks.

Was it helpful?

Solution

natsort does exactly what you need.

sort with SORT_NUMERIC will also work for filenames that start with numbers, but it will break if there are also names that have no numbers in front (all non-number-prefixed names will be sorted before number-prefixed names, and their order relative to one another will be random instead of alphabetic).

OTHER TIPS

You can use sort like this:

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

If you want to reassign keys (which natsort does not do), use usort() combined with strnatcmp() or strnatcasecmp():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top