对数字文件名进行排序


sort numeric filenames

做了一些搜索,但似乎找不到我想要的确切答案。

我想使用"scandir($dir)"提取带有编号文件名的文件,但要使它们正确排序。例如,文件名为:

1-something.ext
2-something-else.ext
3-a-third-name.ext
.
.
.
10-another-thing.ext
11-more-names.ext

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

有什么想法吗?谢谢

natsort正是您所需要的。

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

您可以使用如下排序:

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

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

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