Intereting Posts
Существуют ли языки программирования, предназначенные для PHP, помимо Haxe? Yii: измените стиль имени пользователя в заголовке при входе в систему Codeigniter – Допустимый размер памяти при загрузке Как понять логику usort? PHP: преобразовать специфические боснийские символы в не-боснийские (стандартные символы utf8) Как использовать конфигурационный файл YAML в Silex Framework Версии в CDN Получение данных из базы данных MySQL с использованием PHP, отображение ее в форме для редактирования Создание ассоциативного массива на основе значений другого ассоциативного массива WordPress Ajax возвращает полную html-страницу из functions.php, а не echo Как реализовать базу данных MySQL на веб-странице? Альтернатива для HTTPRequest в php Можно ли загружать изображение на сервер с помощью диалогового окна «Модальное окно» Bootstrap, jQuery, AJAX и PHP? Если да, то как? Если нет, в чем причина? Пара Regex Associative на новых строках ошибка разбора json-данных (значение типа java.lang.String не может быть преобразовано в json-массив)

Как восстановить структуру каталогов в массиве с идентификатором папки

Я хочу получить папку и подпапку из определенного идентификатора папки пути и sub_folder parent_id. Здесь моя функция выбирает папку и подпапку, но без id и parent id.

Я хочу иметь массив с id и родительским id.

function getDirectory($path = '.', $level = 1) { $result = array(); $ignore = array('nbproject', 'src', '.', '..'); $dh = @opendir($path); $i = 0; while ($file = readdir($dh)) { if (!in_array($file, $ignore)) { if (is_dir($path . '/' . $file)) { $level++; $singleResult = array('title' => $file, 'isFolder' => true, 'children' => getDirectory($path . '/' . $file, $level), 'key' => 'node' . $level); $result[] = $singleResult; } } $i++; } closedir($dh); return $result; } $dir = "../UserUpload/Documents/source"; $kevin = getDirectory($dir); 

Эта функция дает мне массив, подобный этому идентификатору id и parent id

  array (size=3) 0 => array (size=4) 'title' => string 'mst146' (length=6) 'isFolder' => boolean true 'children' => array (size=3) 0 => array (size=4) ... 1 => array (size=4) ... 2 => array (size=4) ... 'key' => string 'node2' (length=5) 1 => array (size=4) 'title' => string 't124' (length=4) 'isFolder' => boolean true 'children' => array (size=0) empty 'key' => string 'node3' (length=5) 2 => array (size=4) 'title' => string 'test' (length=4) 'isFolder' => boolean true 'children' => array (size=0) empty 'key' => string 'node4' (length=5) 

я бы предложил использовать функцию scandir внутри отдельного класса (для более четкой рекурсии).

  class DirectoryScanner{ public $scannedData; protected $ignored = array('nbproject', 'src', '.', '..'); public function scanDir($path){ $filesAndDirs = scandir($path); foreach($filesAndDirs as $key => $dirOrFile){ if(!in_array($dirOrFile, $this->ignored) && is_dir($path . DIRECTORY_SEPARATOR . $dirOrFile)){ $this->scannedData[$path][$key] = $dirOrFile; $this->scanDir($path . DIRECTORY_SEPARATOR . $dirOrFile); } } } } 

он выведет двумерный массив, где ключи первого измерения – это путь к тому, где вы находите каталог, второе измерение – порядок каталога (игнорируется. & .. и файлы вызывают смещение в индексах), а значение – это имя каталога.

например:

 Array ( [/var/www/cluster/private/..../2016-03/] => Array ( [21] => chity [25] => export-porovnani [26] => exporty ) [/var/www/cluster/private/..../2016-03/export-porovnani] => Array ( [13] => vsechno ) ) 

вы можете получить данные из класса, обратившись к свойству $ scannedData. лучше было бы создать geter и установить доступность $ scannedData для защищенных / закрытых

Надеюсь, я немного помог тебе.