加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用filemtime()和usort()对文件进行排序会产生随机结果

发布时间:2020-12-13 16:53:04 所属栏目:PHP教程 来源:网络整理
导读:我正在使用usort()和filemtime()按修改日期对文件进行排序,但它会以错误的顺序随机返回文件.我想我错过了一些非常简单但我无法弄明白的东西. usort($user_files,function($a,$b) { return filemtime($a) filemtime($b);});foreach ($user_files as $f) { ech
我正在使用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,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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读