做了一些搜索,但似乎找不到我想要的确切答案。
我想使用"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
正是您所需要的。
sort
和SORT_NUMERIC
也适用于以数字开头的文件名,但如果还有前面没有数字的名称,则会中断(所有非数字前缀的名称都将在数字前缀名称之前排序,它们相对于彼此的顺序将是随机的,而不是字母)。
您可以使用如下排序:
sort($arr, SORT_NUMERIC); // asuming $arr is your array
如果您想重新分配密钥(natsort不这样做),请将usort()与strnatcmp()或strnatcasecmp()组合使用:
usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive