PHP функция получения списка категорий(в виде массива) включая подкатегории

Потребовалась PHP функция спосодна получить список всех директорий(папок) включая подкатегории. Для реализации задачи используется встроенные функции php - glog и is_dir. glob получает список всех файлов и папок в текущей или указанной директории/каталоге. is_dir проверяет является ли адрес директорией(поскольку ещё может являться адресом файла).

Используя функцию glob для получения списка файлов и директорий можно использовать например код glob("*") при этом такой код не отобразит имена файлов и директорий начинающихся с знака "."(точка). Чтобы отобразить вывод файлов и директорий начинающихся с точки используем в адресе конструкцию {,.} а так же в качестве второго параметра GLOB_BRAC, таким образом в конечном счёте получаем код для текущей директории glob("{,.}*",GLOB_BRACE). Код функции с примерами использования доступен ниже.

Для тех кому интересна реализация функции обратите внимание, что используется 2 условия, а именно (basename($a) != ".") и (basename($a) != "..") поскольку glob возвращает так же текущую категорию(.) и предыдущую(..), их мы должны исключить из анализа, иначе в результате использования рекурсии внутри функции dirlist скрипт зациклится до бесконечности.

Например когда мне нужно было получить список директорий в директории с названием "lk" которая находилась в корней сайта, я выполнил код dirlist("lk/") и получил следующий список директорий:
lk/ajax
lk/img
lk/personal
lk/personal/_payments
lk/personal/ajax
lk/personal/enter
lk/personal/feedback
lk/personal/helpers
lk/personal/helpers/Certificates
lk/personal/helpers/Certificates/Live
lk/personal/helpers/Certificates/Test
lk/personal/helpers/Model
lk/personal/helpers/Sync
lk/personal/partials
lk/personal/payments
lk/personal/receipt
lk/personal/scripts
lk/personal/styles
lk/personal/values
lk/personal/views
lk/sendinfo-counters
lk/sendinfo-counters/img
lk/sendinfo-countersOLD
lk/sendinfo-countersOLD/img
lk/tabs
lk/test-form
lk/test-form/img
lk/views

Вы так же можете прочитать следующие статьи: