scandir - как получить оригинальные папки - порядок файлов - PullRequest
0 голосов
/ 24 декабря 2018

элементов внутри fs папки:

lorem  
ipsum  
sun  
moon.php  

function get_items($path){
    $arr = scandir($path);
    $arr = array_slice($arr, 2);
    foreach($arr as $el){
        if(is_dir($el)){
            echo "<div class='folder'>" . $el . "</div>\n";
        }
        else{
            echo "<div class='file'>" . $el . "</div>\n";
        }
    }
}

Результат - все элементы отображаются как класс - file и в следующем порядке:

ipsum  
lorem  
moon.php  
sun 

Как получить папкикак folder и в оригинальном порядке - сначала папки, а затем файлы?

lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

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

Когда вы позже используете is_dir, вы передаете только имя файла / папки (относительный путь).При этом в соответствии с документацией

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


Вы можете исправить свой код, передав правильный путь к is_dir

is_dir("$path/$el")

Чтобы это решение работало $path не должнозавершающий слеш (потому что мы делаем добавляем его).

Более того, $path должен быть либо абсолютным путем к целевому каталогу, либо путем к целевому каталогу относительный в рабочий каталог, скрипт запускается.


Наконец, чтобы сначала перечислить папки, затем файлы, вы можете отсортировать массив или, проще говоря, сделать два цикла foreach следующим образом:

function get_items($path){
    $arr = scandir($path);
    $arr = array_slice($arr, 2);

    sort($arr);

    // Folders first
    foreach($arr as $el){
        if(is_dir("$path/$el")){
            echo "<div class='folder'>" . $el . "</div>\n";
        }
    }

    // Then files
    foreach($arr as $el){
        if( ! is_dir("$path/$el")){
            echo "<div class='file'>" . $el . "</div>\n";
        }
    }
}
0 голосов
/ 24 декабря 2018

Вы все готовы иметь это.

 $path

Итак

$path.$el
...