Я пытаюсь отобразить массив файлов по порядку даты (последний раз).
Я сделал этот цикл покупки через массив и сортировал его в другой массив, но есть ли более простой (более эффективный) способ сделать это?
Я пытаюсь отобразить массив файлов по порядку даты (последний раз).
Я сделал этот цикл покупки через массив и сортировал его в другой массив, но есть ли более простой (более эффективный) способ сделать это?
Для потомков, если сообщение, связанное с сообщением в принятом ответе, потеряно или нечеткое для кого-то, необходим соответствующий код:
<?php
$myarray = glob("*.*");
usort($myarray, create_function('$a,$b', 'return filemtime($a) - filemtime($b);'));
?>
Протестировано это в моей системе и проверил, что он сортирует файл mtime по желанию. Я использовал аналогичный подход (написанный на Python) для определения последних обновленных файлов на моем сайте.
<?php
$items = glob('*', GLOB_NOSORT);
array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_DESC, $items);
Это решение совпадает с принятым ответом и дополнено анонимной функцией 1:
$myarray = glob("*.*");
usort( $myarray, function( $a, $b ) { return filemtime($a) - filemtime($b); } );
1Анонимные функции были введены в PHP в 2010 году. Оригинальный ответ датирован 2008 годом.
Я знаю, что эта ветка старая, но это можно сделать с лучшей производительностью. 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 );