Я хочу получить папку и подпапку из определенного идентификатора папки пути и 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 для защищенных / закрытых
Надеюсь, я немного помог тебе.