2016-03-15 62 views
2

我想从特定路径文件夹ID和子文件夹parent_id中获取文件夹和子文件夹。 在这里我的功能获取文件夹和子文件夹,但没有ID和父母的ID。如何检索包含文件夹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); 

这个功能给我数组这样wiithout ID和父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) 
+0

你是什么意思的ID?文件夹通常没有ID。 – maxhb

+0

但我想给id文件夹@maxhb –

+4

ID应该从哪里来?如果您只需要与文件夹相关的独特内容,请使用它的路径。 – maxhb

回答

1

我会建议你使用内部独立的类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的可用性设置为protected/private

希望我帮了你一些忙。

相关问题