8

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

我想使用“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”更好的方法来解决这个问题。

有什么想法吗?谢谢。

4

3 回答 3

14

natsort完全满足您的需求。

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

于 2012-03-15T20:39:45.707 回答
1

您可以像这样使用排序:

sort($arr, SORT_NUMERIC); // asuming $arr is your array
于 2012-03-15T20:40:34.583 回答
1

如果要重新分配键(natsort 不这样做),请结合使用 usort() 和 strnatcmp() 或 strnatcasecmp():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive
于 2012-03-26T18:32:19.410 回答