views:

38

answers:

2

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
)

Is this possible?

+4  A: 

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);

Array
(
    [0] => 1.jpg
    [1] => 4.jpg
    [2] => 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().

Lizard
you got your example wrong :P
knittl
oops.. fixed now.. thanks
Lizard
A: 
$files = array();
$files[] = '4.jpg';
$files[] = '14.jpg';
$files[] = '1.jpg';
$files[] = '44.jpg';
sort($files, SORT_NUMERIC);
print_r($files);

Array
(
    [0] => 1.jpg
    [1] => 4.jpg
    [2] => 14.jpg
    [3] => 44.jpg
)
Scott Evernden