Функция сортировки работает неправильно с PHP filemtime
Я пытаюсь отсортировать файлы по дате модификации с помощью 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.
здесь вы можете увидеть июль между апрелем и июнем
Может кто-нибудь, пожалуйста, направьте меня к этой проблеме?
1 ответ
Решение
Проблема в том, что вы сортируете удобочитаемые представления дат, поэтому очевидно, что апрель наступает первым (он начинается с 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);
}
Несколько советов:
Вы можете получить последние измененные времена для ваших файлов в одну строку с
$array2 = array_map('filemtime', $images);
date
зависит от часового пояса системы. Убедитесь, что вы правильно установилиdate_default_timezone_set
прежде чем что-то делать.