За последние 24 часа нас посетили 22819 программистов и 1312 роботов. Сейчас ищет 951 программист ...

Создать массив из списка папок

Тема в разделе "PHP для новичков", создана пользователем Булат Азат улы, 11 фев 2024.

  1. Булат Азат улы

    Булат Азат улы Активный пользователь

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    Всех приветствую, товарищи!
    Есть одна директория, допустим, "folder". Внутри него несколько десятков папок (внутри которых как папки, так и файлы). И так же не исключено, что в "folder" тоже могут быть файлы.
    Мне нужно собрать в массив имена всех папок в папке "folder". Файлы и папки внутри папок не нужны.
    Искал информацию, нашёл функции "scandir" и "is_dir". Но не могу понять, как с помощью "is_dir" отфильтровать массив, полученный с помощью "scandir".
    Не могли бы помочь с этим? Может, есть более правильный и легкий вариант, чем данные функции?
     
  2. amberson

    amberson Активный пользователь

    С нами с:
    23 июл 2020
    Сообщения:
    63
    Симпатии:
    16
    PHP:
    1. // пути папок первого уровня
    2. $paths = glob('/folder/*', GLOB_ONLYDIR);
    3. print_r($paths);
    4.  
    5. // имена папок первого уровня
    6. $names = array_map(fn ($path) => basename($path), glob('/folder/*', GLOB_ONLYDIR));
    7. print_r($names);
     
    Булат Азат улы нравится это.
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    332
    Симпатии:
    66
    Адрес:
    Бавария, Германия
    Добрый день!
    Коллега amberson показал как это сделать используя glob и array_map.
    Альтернативное решение - SPL класс DirectoryIterator
    PHP:
    1. $path = 'folder';
    2. $names = [];
    3. foreach (new DirectoryIterator($path) as $file) {
    4.     if($file->isDot() )
    5.         continue;
    6.     if($file->isDir())
    7.         $names[] = $file->getFilename();
    8. }
    9. print_r($names);
    Сам не проверял, но говорят что класс DirectoryIterator работает намного быстрее чем функция global.
    источник:
    https://www.mm-newmedia.de/2010/04/glob-vs-directoryiterator/
     
    Булат Азат улы нравится это.