【问题标题】:Listing files in numerical order instead of alphabetical?按数字顺序而不是字母顺序列出文件?
【发布时间】:2012-02-17 21:01:04
【问题描述】:

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

【问题讨论】:

  • 这仅在您使用 01 代替 1 和 02 代替 2 时有效,依此类推。否则,以上将是顺序。
  • Oldskool,不,01 仍会使其按字母顺序排列。我试过了。但 Hakre 的想法是正确的。

标签: php linux unix ffmpeg


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你像你说的那样使用ls...

    ls | sort -n
    

    会成功的。

    【讨论】:

    • 是的,我只是在您发布之前 3 分钟才想到这一点。但现在问题是在 PHP 中执行此操作。我猜是高管?
    【解决方案3】:

    您可以将它们放在一个数组中并使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2018-03-10
      相关资源
      最近更新 更多