php-glob()-按d排序

我正在尝试按日期顺序显示文件数组(最后修改)。

我已经完成了遍历数组并将其排序到另一个数组中的购买循环,但是有没有更简单(更有效)的方法来做到这一点?

cole asked 2020-06-27T21:12:48Z
4个解决方案
93 votes

为了后代的目的,如果在接受的答案中链接的论坛帖子丢失或不清楚,则所需的相关代码为:

<?php

$myarray = glob("*.*");
usort($myarray, create_function('$a,$b', 'return filemtime($a) - filemtime($b);'));

?>

在我的系统上对此进行了测试,并验证了它确实可以根据需要按文件mtime进行排序。 我也使用类似的方法(用Python编写)来确定我网站上的最新更新文件。

Jay answered 2020-06-27T21:13:07Z
36 votes
<?php
$items = glob('*', GLOB_NOSORT);
array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_DESC, $items);
Alf Eaton answered 2020-06-27T21:13:23Z
16 votes

此解决方案与接受的答案相同,但使用匿名函数1更新:

$myarray = glob("*.*");

usort( $myarray, function( $a, $b ) { return filemtime($a) - filemtime($b); } );

1匿名函数已于2010年在PHP中引入。原始答案为2008年。

fusion3k answered 2020-06-27T21:13:47Z
0 votes

我知道此线程很旧,但是可以实现更好的性能。 接受答案中的usort()将多次致电filemtime()。 PHP使用quicksort算法,平均性能为1.39*n*lg(n)。该算法每次比较两次调用filemtime(),因此,对于10个目录条目,我们将有28个调用,对于100个条目,约为556个调用;对于1000个条目,约为8340个调用。 对我有用,并且表现出色:

exec ( stripos ( PHP_OS, 'WIN' ) === 0 ? 'dir /B /O-D *.*' : 'ls -td1 *.*' , $myarray );
Sebastian answered 2020-06-27T21:14:08Z
translate from https://stackoverflow.com:/questions/124958/glob-sort-by-date