Я заметил кое-что интересное о функции glob в PHP.
Когда я делаю
$directories = glob('*', GLOB_ONLYDIR);
echo json_encode($directories);
функция вернет кучу имен папок в массиве json, отлично!
Но, когда я делаю
$directories = glob('./img/works/*', GLOB_ONLYDIR);
echo json_encode($directories);
функция вернет кучу имен папок с путем, указанным ниже:
[".\/img\/works\/123",
".\/img\/works\/234",
".\/img\/works\/345",
".\/img\/works\/456"]
Это нормально? Если это так, как я могу заставить функцию glob выводить только имена папок?
Соответствующим вопросом будет: есть ли способ использовать флаги GLOB_NOESCAPE GLOB_ONLYDIR одновременно при вызове функции glob?
Да, поведение так и должно быть! Если хотите, вы можете сделать что-то подобное, чтобы получить только имя dir:
$directories = array_map("basename", glob('./test/*', GLOB_ONLYDIR));
echo json_encode($directories);
РЕДАКТИРОВАТЬ:
Да, вы можете использовать несколько флагов с glob, это так просто:
$directories = array_map("basename", glob('./test/*', GLOB_ONLYDIR | GLOB_NOESCAPE));
Других решений пока нет …