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

3

基本上,我有一堆文件,它们都有一个共同的前缀(logo%d.jpg)。

当使用ls查看它们或者在PHP中循环遍历目录时,我没有按照数字顺序接收到它们,这意味着logo1.jpg、logo2.jpg等。

相反,我得到的是按字母顺序排列的,例如:

logo1.jpg、logo10.jpg、logo11.jpg ... logo19.jpg、logo2.jpg(而不是logo20.jpg

有没有办法按数字顺序输出它们?logo1、logo2、logo3等


只有在使用 01 而不是 1,02 而不是 2 等等时才能正常工作。否则,以上将是顺序。 - Oldskool
老派的方法不行,01 仍然会按字母顺序排列。我试过了。但是 Hakre 的想法是正确的。 - volk
3个回答

8
你可以将它们放入数组中,并使用natsort­Docs函数对数组进行排序:
$array = array('logo1','logo2','logo12');
natsort($array);

这给出了(演示):

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

你要找的排序通常称为自然排序。
或者,你可以给数字加前缀,例如,如果你已经在使用sprintf来命名文件,那么标准的排序仍然可以工作:
`logo%03d.jpg`

会生成哪个

logo001.jpg

对于十进制 1


2

将数据加载到数组中并使用 natsort() 函数进行排序。


1

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

ls | sort -n

会有作用。


是的,我在你发布这条消息前大约3分钟就解决了这个问题。但现在的问题是如何在PHP中实现它。我猜测使用exec命令? - volk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接