排序多维数组中的文件列表

时间:2011-10-14 20:07:43

标签: php sorting

有许多类似的问题,我几乎有解决方案,但我有一个案例没有像客户想要的那样排序。

我使用以下函数对数组进行排序:

function sortFilesByName($a, $b) {
    if (basename(strtolower($a['path'])) == basename(strtolower($b['path']))) {
        return 0;
    }
    return (basename(strtolower($a['path'])) < basename(strtolower($b['path']))) ? -1 : 1;
}

问题是我在排序列表时得到以下顺序:

  1. file2.png
  2. file3.png
  3. file4.png
  4. file5.png
  5. file6.png
  6. file7.png
  7. file8.png
  8. file9.png
  9. file10.png
  10. file11.png
  11. file1.png
  12. 客户希望将file1.png放在列表的顶部,我不得不说我对如何实现这一点感到有些困惑。任何帮助表示赞赏:)

    在给出答案之后我已经接近了,我将我的功能改为:

    function sortFilesByName($a, $b) {
        return strnatcmp(strtolower(basename($a['path'])), strtolower(basename($b['path'])));
    }
    

    它有效!谢谢!

2 个答案:

答案 0 :(得分:3)

natsort功能可以执行您想要的操作:http://php.net/manual/en/function.natsort.php

答案 1 :(得分:3)

我认为你需要natsort();功能。它按字母顺序排序。

<?php 
   $numbers = array("1.gif","2.gif","20.gif","10.gif"); 
   natsort($numbers); 
   print_r($numbers); 
?> 

输出

Array
(
[0] => 1.gif
[1] => 2.gif
[3] => 10.gif
[2] => 20.gif
)