2012-01-24 25 views
3

基本上,我有一堆帶有共同前綴的文件(logo%d.jpg)。按數字順序列出文件而不是按字母順序?

當使用ls查看它們或甚至在PHP中循環目錄時,我沒有按數字順序收到它們,意思是logo1.jpg, logo2.jpg

相反,我讓他們按字母順序排列,如:

logo1.jpg, logo10.jpg, logo11.jpg ... logo 19.jpg, logo2.jpg(而不是logo20.jpg

有沒有辦法輸出中他們在數字順序? logo1, logo2, logo3 .. etc.

+0

只有當您使用01而不是1和02而不是2時,這才起作用,以此類推。不過,以上將是順序。 – Oldskool

+0

Oldskool,不,01將仍然使它按字母順序排列。我試過了。但是,Hakre得到了正確的想法。 – volk

回答

8

你可以把它們放入數組,並與natsort­Docs函數對數組進行排序:

$array = array('logo1','logo2','logo12'); 
natsort($array); 

其中給出(Demo):

array(3) { 
    [0]=> 
    string(5) "logo1" 
    [1]=> 
    string(5) "logo2" 
    [2]=> 
    string(6) "logo12" 
} 

你要找的訂單通常被稱爲自然秩序。

或者,您可以在數字前綴,例如如果您已經使用sprintf來命名文件,使標準排序順序,仍能正常工作:

`logo%03d.jpg` 

這將產生

logo001.jpg 

小數1

+0

哇...我知道這個... –

2

加載到一個數組,像你說的使用natsort()

1

如果您使用ls ...

ls | sort -n 

會做的伎倆。

+0

是的,我剛剛發現它之前3分鐘就知道了這一點。但現在問題是在PHP中這樣做。我想exec? – volk