scandir - 排序数字文件名

时间:2012-03-15 20:36:45

标签: php scandir

做了一些搜索,但似乎无法找到我正在寻找的确切答案。

我想使用'scandir($ dir)'来输入带有编号文件名的文件,但要正确排序。例如,文件名是:

1-something.ext

2-something-else.ext

3-a-third-name.ext

.

.

.

10-another-thing.ext

11-more-names.ext

我遇到的问题是10-a-fourth-thing.ext将显示在2-something-else.ext之前。我想找到一种更好的方法来解决这个问题,而不是在所有文件名前面引入前导'0'。

有什么想法?感谢。

3 个答案:

答案 0 :(得分:12)

natsort完全符合您的需要。

带有sort

SORT_NUMERIC也适用于以数字开头的文件名,但如果前面也没有数字的名称,它将会中断(所有非数字前缀的名称都将被排序在以数字为前缀的名称之前,它们相对于彼此的顺序将是随机的而不是字母的。)

答案 1 :(得分:1)

您可以使用以下排序:

sort($arr, SORT_NUMERIC); // asuming $arr is your array

答案 2 :(得分:1)

如果你想重新分配密钥(natsort不这样做),请使用usort()结合strnatcmp()或strnatcasecmp():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive