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

Glob() - Сортировать по имени

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

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

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

4b9b3361

Ответ 1

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

foreach(array_reverse(glob("*.txt")) as $filename) { ...

Ответ 2

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

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

CodePad.

Ответ 3

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

<?php
for($result = glob("*.txt"), $i = count($result); $i > 0; --$i) {
    include($result[$i-1]);
}
?>

Ответ 4

Просто дополнение к ответу @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 массив, переданный в параметре, и возвращает только логическое значение.