PHP - 如何修复SCANDIR_SORT

时间:2018-01-06 20:56:44

标签: php sorting

我正在开发一个新闻表单,您可以在其中输入文本和autor并将其提交到博客。提交后,使用以下命名约定创建文件:newsCounter_date.html,例如121_01_06_2018-093334.html

newsCounter是我在每次提交后递增的值,date是当前日期。

如果有人加载博客,那么所有新闻条目都是通过php加载的,但首先它们会被排序,因此最新的新闻条目位于顶部。我这样排序:

$allFiles = array_diff(
    scandir("news", SCANDIR_SORT_DESCENDING), 
    array('..', '.')
);

一切正常,直到我到达10篇博文,然后发生了一些奇怪的事情。而不是出现在顶部的10.帖子,它出现在底部的某个地方。

我注意到排序不再起作用,并且它在我的IDE中的行为完全比在Windows中完全表现。看看这个:

enter image description here

在Windows上,它从0开始 - > 12,但在我的NetBeans IDE中它是这样的:0 - > 10 - > 11 - > 12 - > 2 - > 3 - > 4 ...所以我认为NetBeans排序确实像SCANDIR_SORT一样工作

提示:缺少1个。

是否有另一种排序方法,而不是SCANDIR_SORT_DESCENDING 窗户排序?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用natsort或sort_numeric。如果您的名字没有数字,sort_numeric将会中断。 natsort将“自然地”对数字进行排序。就像this回答一样。这可能是一种不改变日期结构的方法。

答案 1 :(得分:1)

使用数字前缀吗?

如果您刚刚将文件名更改为Y-m-d H:m:s.html,我相信订单会自行排序(因为字母和自然排序都会以相同的方式排序),例如:

  • 2018-01-06 09:04:37.html
  • 2018-01-06 02:34:04.html
  • 2018-01-05 22:01:54.html

(请注意,您必须使用24小时格式)

你的问题是某些程序自然地订购你的文件"而其他程序按字母顺序排序。将文件名更改为我建议的格式可以完全避免这个问题。

natsort上的PHP文档很好地突出了差异:

Standard sorting
Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)

Natural order sorting
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)