php – 使用filemtime()和usort()对文件进行排序会产生随机结果
我正在使用usort()和filemtime()按修改日期对文件进行排序,但它会以错误的顺序随机返回文件.我想我错过了一些非常简单但我无法弄明白的东西.
usort($user_files,function($a,$b) { return filemtime($a) > filemtime($b); }); foreach ($user_files as $f) { echo $f . "<br />"; } 之后我上传文件. Complete code. 上传文件1.txt … 10.txt以测试显示的结果是: 6.txt 5.txt 4.txt 3.txt 2.txt 1.txt 7.txt Uploaded! 正如所料.然后,当我达到8.txt时: 6.txt 7.txt 5.txt 4.txt 2.txt 3.txt 1.txt 8.txt Uploaded! 另一次,直到我达到10.txt是好的: 7.txt 8.txt 9.txt 6.txt 5.txt 2.txt 3.txt 4.txt 1.txt 10.txt Uploaded! 当ls -t返回时: 10.txt 9.txt 8.txt 7.txt 6.txt 5.txt 4.txt 3.txt 2.txt 1.txt 那么……那里发生了什么? Debian Wheezy 7.4,up-to-date. PHP Version 5.4.4-14+deb7u8 Linux pc 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 FPM/FastCGI nginx/1.2.1 解决方法
Man usort说
http://www.php.net/manual/en/function.usort.php
但提供的回调只有“>”操作符: { return filemtime($a) > filemtime($b); } 而男人说(http://www.php.net/manual/en/language.operators.comparison.php)“大于”又名>运算符仅根据请求返回true或false,但不返回负数/零/正数.
您对在两个文件时间之间使用“减法”“ – ”运算符的看法,因为Man再次说filemtime是整数(http://www.php.net/manual/en/function.filemtime.php). 并且在这个网站上有一个重复的答案(用filemtime usort搜索并感觉很幸运 – 第一个结果是):Order this array by date modified?,答案是在Michael Berkowski,他说: if (filemtime($a) === filemtime($b)) return 0; return filemtime($a) < filemtime($b) ? -1 : 1; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |