как отсортировать каталоги и файлы в определенном каталоге? - PullRequest
0 голосов
/ 19 апреля 2019

Я читаю все каталоги и файлы внутри каталога и хочу отсортировать файлы по алфавиту.

if ($handle = opendir($dir)) {
   while (false !== ($file = readdir($handle))) {
      $files = array($file);
      sort($files);

      $clength = count($files);
      for($x = 0; $x < $clength; $x++) {
        echo $files[$x];
        echo "<br>";
      }

Код выше выводит мне все каталоги и файлы, но не сортирует их по алфавиту. Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2019

Чтобы ответить на ваш вопрос, вам нужно сначала собрать все файлы, а затем отсортировать их сразу. Итак, ваш код будет выглядеть так:

<?php

while (false !== ($file = readdir($handle))) {
      $files[] = $file;
}

sort($files);
  • Но лучший вариант - просто использовать scandir () , который возвращает вам список файлов (включая папки) в вашем каталоге, а затем вы можете отсортировать их соответствующим образом.

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

Код:

<?php 

$files = array_diff(scandir(YOUR_DIRECTORY_PATH_HERE),array(".",".."));

usort($files,function($file1,$file2){
    return strcmp(strtolower($file1),strtolower($file2));
});

print_r($files);
  • Я использовал array_diff () , чтобы удалить . и .., которые включены в результат scandir().
2 голосов
/ 19 апреля 2019

Вы должны использовать это.

if ($handle = opendir($dir)) {


        while (false !== ($file = readdir($handle))) {
            $files[] = $file;

        }
        sort($files);
        $clength = count($files);
        for ($x = 0; $x < $clength; $x++) {
            echo $files[$x];
            echo "<br>";
        }
    }

Обновление

$files[] = strtolower($file); // for ignore first letter capital
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...