我正在开发一个新闻表单,您可以在其中输入文本和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中完全表现。看看这个:
在Windows上,它从0开始 - > 12,但在我的NetBeans IDE中它是这样的:0 - > 10 - > 11 - > 12 - > 2 - > 3 - > 4 ...所以我认为NetBeans排序确实像SCANDIR_SORT一样工作
提示:缺少1个。
是否有另一种排序方法,而不是SCANDIR_SORT_DESCENDING
窗户排序?
我该如何解决这个问题?
答案 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 )