подскажите, как правильно заменить значение ключа на метку времени создания файла для сортировки?
$entries = array();
if ($handle = opendir(ROOT_DIR .ARTICLE_DIR)) {
// получаем названия статей и названия файлов
while (false !==($entry = readdir($handle))) {
if ($entry !='.' and $entry != '..') {
$entries[] = $entry;
foreach ($entries as $key => $entry){
заменить ключ на метку времени создания файла}
//usort($entries);
echo '<li><a href="index.php?show='.$entry.'">'.$entry.'</a></li>'.'<br>';
}
}
}
Если вам требуется отсортировать файлы по дате создания, то можно решить задачу в пару этапов. Сначала собрать массив с датами создания, используя array_map
и filectime()
, затем слить оба массива и отсортировать по ключам (что в принципе вы и хотели).
Таким образом, если в $entries
у вас имена файлов, то как-то так:
$ct = array_map('filectime', $entries);
$data = array_combine($ct, $entries);
ksort($data);
В целом все же это несколько корявый подход, и лучше сначала собрать массив, где элемент будет содержать информацию о времени создания и имени файла. А затем уже воспользоваться обычной сортировкой. Это исключит вариант с потенциальным повторением ключей.
$entries = array_map(function($f){
return ['f' => $f, 'ct' => filectime($f)];
}, $entries);
usort($entries, function($a, $b){ return $a['ct'] - $b['ct']; });
$entries = array_column($entries, 'f');
Можно, конечно, и просто воспользоваться использованием filectime
в функции-компараторе
usort($entries, function($a, $b){ return filectime($a) <=> filectime($b);});
Но это повлечет больше обращений к файловой системе при сортировке.
в дополнение:
В первом случае, можно сделать ключами имена файлов, поменять местами аргументы array_combine
, а затем использовав обычную сортировку sort()
и вернув ключи array_keys()
с именами. Пожалуй, это будет оптимальным вариантом.
$ct = array_map('filectime', $entries);
$data = array_combine($entries, $ct);
sort($data)
$files = array_keys($data);
Еще более оптимальный вариант будет таким
array_multisort(array_map('filectime', $entries), SORT_DESC, $entries);
Виртуальный выделенный сервер (VDS) становится отличным выбором
OpenServer не запускается, пару минут назад работал, а сейчас нетВот лог Файл C:\Windows\system32\drivers\etc\hosts недоступен для записи
столкнулся с такой проблемой как изменение заголовка диалогового окна, в зависимости от получения результата с хостинга
Я хочу организовать ввод пароля, чтобы вместо символа в консоли появлялись звездочка, если нажата клавиша Enter ввод заканчиваетсяВместо одной...
Начал изучать OpenGL по курсу "Gameinstitute - OpenGL Graphics Programming"В третьем видио на восемнадцатой минуте происходит сборка сцены, а у меня повыпрыгивали...