Подтвердить что ты не робот

Glob() - сортировать по дате

Я пытаюсь отобразить массив файлов по порядку даты (последний раз).

Я сделал этот цикл покупки через массив и сортировал его в другой массив, но есть ли более простой (более эффективный) способ сделать это?

4b9b3361

Ответ 1

Для потомков, если сообщение, связанное с сообщением в принятом ответе, потеряно или нечеткое для кого-то, необходим соответствующий код:

<?php

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

?>

Протестировано это в моей системе и проверил, что он сортирует файл mtime по желанию. Я использовал аналогичный подход (написанный на Python) для определения последних обновленных файлов на моем сайте.

Ответ 2

<?php
$items = glob('*', GLOB_NOSORT);
array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_DESC, $items);

Ответ 3

Это решение совпадает с принятым ответом и дополнено анонимной функцией 1:

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

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

1Анонимные функции были введены в PHP в 2010 году. Оригинальный ответ датирован 2008 годом.

Ответ 4

Я знаю, что эта ветка старая, но это можно сделать с лучшей производительностью. usort() в принятом ответе будет filemtime() вызывать filemtime(). PHP использует алгоритм быстрой сортировки, который имеет среднюю производительность 1.39*n*lg(n). Алгоритм вызывает filemtime() дважды за сравнение, поэтому у нас будет около 28 вызовов для 10 записей каталога, 556 вызовов для 100 записей, 8340 вызовов для 1000 записей и т.д. Следующий фрагмент кода хорошо работает для меня и имеет отличную производительность:

exec ( stripos ( PHP_OS, 'WIN' ) === 0 ? 'dir /B /O-D *.*' : 'ls -td1 *.*' , $myarray );