2010-07-23 63 views
1

我有一個數組,我希望排序,它包含帶有文件擴展名的圖像,文件名是數字,文件擴展名顯然是一個字符串。用php正確排序陣列

$files = array(); 
$files[] = '4.jpg'; 
$files[] = '14.jpg'; 
$files[] = '1.jpg'; 
$files[] = '44.jpg'; 

如果我使用排序(),然後我結束了以下內容:

sort($files); 
print_r($files); 

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

什麼其實我想要的是:

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

這可能嗎?

回答

4

這樣做的最快的一個最簡單的辦法是用natsort() - http://php.net/manual/en/function.natsort.php

如:

natsort($files); 
print_r($files); 

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

該功能實現了訂單字母數字串在一個人會同時保持關鍵的方式排序算法/價值關聯。這被描述爲「自然排序」。

也可以使用sort_flags改變選項,在sort()功能

sort($files, SORT_NUMERIC); 
print_r($files); 

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

可選的第二個參數sort_flags改變可以使用利用這些值來修改排序行爲:

排序類型標識:

SORT_REGULAR - 正常比較項目(不要更改類型)

SORT_NUMERIC - 比較項目數值

SORT_STRING - 對象進行字符串比較

SORT_LOCALE_STRING - 對象進行字符串比較,基於當前區域。在PHP 4.4.0和5.0.2中添加,它使用系統區域設置,可以使用setlocale()更改該區域設置。

+0

你有你的錯例如:P – knittl 2010-07-23 18:14:05

+0

哎呀..現在固定..謝謝 – Lizard 2010-07-23 18:17:54

0
$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 
)