PHP повторяет все изображения вложенных папок

У меня есть каталог с подпапками, содержащими изображения. Мне нужно отобразить все это на одной странице, а также их имя папки, так что-то вроде этого:

  • echo Subfolder name
    echo image, image, image
  • echo Subfolder2 name
    echo image2, image2 , image2
  • и т. д.

я пытался использовать

$images = glob($directory . "*.jpg");

но проблема в том, что я должен точно определить имя подпапки в $directory, например «путь/папка/подпапка/»;

Есть ли какой-нибудь вариант, например, какой-то «шаблон», который будет проверять все подпапки и отображать имя подпапки foreach и ее содержимое?

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


person John K    schedule 07.09.2017    source источник
comment
PHP Glob не поддерживает подстановочный знак **. Вы должны написать рекурсивную функцию, которая делает это.   -  person Jarzon    schedule 07.09.2017


Ответы (1)


Glob обычно имеет рекурсивный подстановочный знак, написанный как /**/, но функция PHP Glob не поддерживает его. Так что единственный способ - написать свою собственную функцию. Вот простой, который поддерживает рекурсивный подстановочный знак:

<?php
function recursiveGlob($pattern)
{
    $subPatterns = explode('/**/', $pattern);

    // Get sub dirs
    $dirs = glob(array_shift($subPatterns) . '/*', GLOB_ONLYDIR);

    // Get files in the current dir
    $files = glob($pattern);

    foreach ($dirs as $dir) {
        $subDirList = recursiveGlob($dir . '/**/' . implode('/**/', $subPatterns));

        $files = array_merge($files, $subDirList);
    }

    return $files;
}

Используйте это так $files = recursiveGlob("mainDir/**/*.jpg");

person Jarzon    schedule 07.09.2017