排序函数在filemtime PHP中工作不正常


Sort function works wrong with filemtime PHP

我正在尝试使用PHP按修改日期对文件进行排序。

我使用filemtime函数,然后使用sort函数,使用以下代码:

<?php
$array2 = array();
$images = glob("*.*");
foreach($images as $image) {
echo "Last modified: ".date("F d Y H:i:s.",filemtime($image));
echo "<br>";
array_push($array2,date("F d Y H:i:s.",filemtime($image)));
}
//echo array2;
sort($array2);
echo "<br>";
foreach ($array2 as $ar)
{
    echo $ar;
    echo "<br>";
}
//$array2[$image] = date("F d Y H:i:s.",filemtime($image));
?>

输出就像这个

Last modified: June 21 2013 15:48:42.
Last modified: June 12 2013 14:43:10.
Last modified: April 09 2013 15:39:13.
Last modified: June 12 2013 14:00:14.
Last modified: June 21 2013 16:08:58.
Last modified: July 15 2013 12:44:28.
Last modified: July 15 2013 12:48:48.
Last modified: July 15 2013 14:42:19.
Last modified: July 15 2013 14:54:48.
Last modified: April 09 2013 15:39:13.
Last modified: June 21 2013 15:34:30.
Last modified: June 21 2013 15:56:32.
April 09 2013 15:39:13.
April 09 2013 15:39:13.
July 15 2013 12:44:28.
July 15 2013 12:48:48.
July 15 2013 14:42:19.
July 15 2013 14:54:48.
June 12 2013 14:00:14.
June 12 2013 14:43:10.
June 21 2013 15:34:30.
June 21 2013 15:48:42.
June 21 2013 15:56:32.
June 21 2013 16:08:58.

在这里你可以看到七月在四月和六月之间

有人能帮我解决这个问题吗?

问题是,您正在对日期的人类可读表示进行排序,所以很明显四月是第一位的(它以A开头)。

你需要做的是类似的事情

foreach($images as $image) {
    array_push($array2, filemtime($image));
}
sort($array2);
// and now, AFTER sorting get the formatted dates 
foreach ($array2 as $ts)
{
    echo date("F d Y H:i:s.", $ts);
}

一些提示:

  1. 您可以使用在一行中获得文件的最后修改时间

    $array2 = array_map('filemtime', $images);
    
  2. date取决于系统时区。在做任何事情之前,请确保已使用date_default_timezone_set正确设置了它。