微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

value_compare_func

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

但提供的回调只有“>”操作符:

{
    return filemtime($a) > filemtime($b);
}

而男人说(http://www.php.net/manual/en/language.operators.comparison.php)“大于”又名>运算符仅根据请求返回true或false,但不返回负数/零/正数.

$a > $b Greater than TRUE if $a is strictly greater than $b.

您对在两个文件时间之间使用“减法”“ – ”运算符的看法,因为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; 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐