glob () - сортировка по имени - PullRequest
14 голосов
/ 10 октября 2011

Как я могу изменить сортировку по имени файла?В настоящее время он отображает все текстовые файлы в алфавитном / числовом порядке, но я пытаюсь сделать так, чтобы он отображался в порядке убывания.Прямо сейчас у меня есть ...

<?php  
foreach (glob("*.txt") as $filename) {
   include($filename);
}
?>

Я довольно новичок в PHP, но я попробовал usort с добавленным массивом, но это просто привело к отображению только 1 текстового файла, так что либоне работает или я просто неправильно его кодировал.

Ответы [ 4 ]

28 голосов
/ 10 октября 2011

Вы можете использовать array_reverse:

foreach(array_reverse(glob("*.txt")) as $filename) { ...
2 голосов
/ 19 марта 2018

Поскольку функция glob() сортирует имена файлов как поведение по умолчанию, вы можете просто перебрать полученный массив в обратном порядке и, следовательно, избежать какой-либо дополнительной обработки:

<?php
for($result = glob("*.txt"), $i = count($result); $i > 0; --$i) {
    include($result[$i-1]);
}
?>
2 голосов
/ 10 октября 2011

Способ сделать это с usort() будет ...

usort($files, function($a, $b) {
    return strcmp($b, $a);
});

CodePad .

0 голосов
/ 05 мая 2019

Просто дополнение к ответу @Foo Bah: при работе с именами файлов в каталоге я обычно добавляю natsort, чтобы предотвратить типичный случай упорядочивания:

  • 'image1.png'
  • ' image10.png '
  • ' image2.png '

natsort - более удобный для пользователя алгоритм сортировки, которыйсохранит естественную нумерацию:

  • 'image1.png'
  • 'image2.png'
  • 'image10.png'

Итак, ответ FooBah:

$list = glob("*.jpg");
natsort($list);
foreach(array_reverse($list) as $filename) { ...

Обратите внимание, что natsort изменяет массив, переданный в параметре, и возвращает только логическое значение.

...