Ответ 1
Вы можете использовать array_reverse
:
foreach(array_reverse(glob("*.txt")) as $filename) { ...
Как я могу отменить сортировку по имени файла? В настоящее время он отображает все текстовые файлы в алфавитном/числовом порядке, но я пытаюсь отображать его в порядке убывания. Прямо сейчас, у меня есть...
<?php
foreach (glob("*.txt") as $filename) {
include($filename);
}
?>
Я новичок в PHP, но я попробовал usort с добавленным массивом, но это только привело к отображению только 1 текстовых файлов, так что либо это не работает, либо я просто неправильно закодировал.
Вы можете использовать array_reverse
:
foreach(array_reverse(glob("*.txt")) as $filename) { ...
Способ сделать это с помощью usort()
будет...
usort($files, function($a, $b) {
return strcmp($b, $a);
});
Поскольку функция glob()
сортирует имена файлов как поведение по умолчанию, вы можете просто перебрать полученный массив в обратном порядке и, следовательно, избежать какой-либо дополнительной обработки:
<?php
for($result = glob("*.txt"), $i = count($result); $i > 0; --$i) {
include($result[$i-1]);
}
?>
Просто дополнение к ответу @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
массив, переданный в параметре, и возвращает только логическое значение.