I have an array that I wish to sort, it contains images with file extensions, the filename is numeric and the file extension is obviously a string.
$files = array();
$files[] = '4.jpg';
$files[] = '14.jpg';
$files[] = '1.jpg';
$files[] = '44.jpg';
If I use sort()
, then I end up with the following:
sort($files);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 14.jpg
[2] => 4.jpg
[3] => 44.jpg
)
What I actually want is:
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)
The quickest an easiest way of doing this is with natsort()
- http://php.net/manual/en/function.natsort.php
e.g:
natsort($files);
print_r($files);
Output:
Array
(
[2] => 1.jpg
[0] => 4.jpg
[1] => 14.jpg
[3] => 44.jpg
)
This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations. This is described as a "natural ordering".
you can also use sort_flags option in the sort()
function
sort($files, SORT_NUMERIC);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)
The optional second parameter sort_flags may be used to modify the sorting behavior using these values:
Sorting type flags:
SORT_REGULAR - compare items normally (don't change types)
SORT_NUMERIC - compare items numerically
SORT_STRING - compare items as strings
SORT_LOCALE_STRING - compare items as strings, based on the current locale. Added in PHP 4.4.0 and 5.0.2, it uses the system locale, which can be changed using setlocale().