Reputation: 7080
$files = array (
'/test/tmp/file_7.sql.gz',
'/test/tmp/file_9.sql.gz',
'/test/tmp/file_11.sql.gz',
'/test/tmp/file_1.sql.gz',
'/test/tmp/file_3.sql.gz',
'/test/tmp/file_12.sql.gz',
'/test/tmp/file_13.sql.gz',
'/test/tmp/file_10.sql.gz',
'/test/tmp/file_5.sql.gz',
'/test/tmp/file_2.sql.gz',
'/test/tmp/file_8.sql',
'/test/tmp/file_4.sql.gz',
'/test/tmp/file_6.sql.gz',
);
echo "<pre>";
sort($files);
print_r($files);
When use sort()
it gives output like following
Array
(
[0] => /test/tmp/file_1.sql.gz
[1] => /test/tmp/file_10.sql.gz
[2] => /test/tmp/file_11.sql.gz
[3] => /test/tmp/file_12.sql.gz
[4] => /test/tmp/file_13.sql.gz
[5] => /test/tmp/file_2.sql.gz
[6] => /test/tmp/file_3.sql.gz
[7] => /test/tmp/file_4.sql.gz
[8] => /test/tmp/file_5.sql.gz
[9] => /test/tmp/file_6.sql.gz
[10] => /test/tmp/file_7.sql.gz
[11] => /test/tmp/file_8.sql
[12] => /test/tmp/file_9.sql.gz
)
But I want it like this
Array
(
[0] => /test/tmp/file_1.sql.gz
[1] => /test/tmp/file_2.sql.gz
[2] => /test/tmp/file_3.sql.gz
[3] => /test/tmp/file_4.sql.gz
[4] => /test/tmp/file_5.sql.gz
[5] => /test/tmp/file_6.sql.gz
[6] => /test/tmp/file_7.sql.gz
[7] => /test/tmp/file_8.sql
[8] => /test/tmp/file_9.sql.gz
[9] => /test/tmp/file_10.sql.gz
[10] => /test/tmp/file_11.sql.gz
[11] => /test/tmp/file_12.sql.gz
[12] => /test/tmp/file_13.sql.gz
)
Upvotes: 2
Views: 53
Reputation: 1537
You can use natsort() with array_values()
echo "<pre>";
natsort($files);
$files= array_values($files);
print_r($files);
echo "</pre>";
Upvotes: 2
Reputation: 19764
You have to use a natural order
algorithm : natsort()
:
natsort($files);
And use array_values() to reset the index. For example:
natsort($files);
$files = array_values($files);
echo "<pre>";
print_r($files);
Upvotes: 2