按数字顺序列出文件而不是字母?

时间:2012-01-24 15:53:48

标签: php linux unix ffmpeg

基本上,我有一堆带有公共前缀(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.

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

加载到数组中并使用natsort()

答案 2 :(得分:1)

如果您正在使用ls,就像您说的那样......

ls | sort -n

会做到这一点。