【问题标题】:Folder Tree in array using PHP使用PHP的数组中的文件夹树
【发布时间】:2013-01-13 05:45:51
【问题描述】:

我正在尝试显示文件夹树。它的工作都很好。下面是代码。

$fileData = fillArrayWithFileNodes( new DirectoryIterator( $dir ) );

    function fillArrayWithFileNodes( DirectoryIterator $dir )
    {
      $data = array();
      foreach ( $dir as $node )
      {
        if ( $node->isDir() && !$node->isDot() )
        {
          $data[$node->getFilename()] = fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );
        }
        else if ( $node->isFile() )
        {
          $data[] = $node->getFilename();
        }
      }
      return $data;
    }

但我有一个新要求。我想在课堂上使用它,这样我就可以这样使用它。

    $tree = new folderTree();
    $structure = $tree->display('testdir',2); //2 is the level of subfolders

所以我以下面的方式将所有内容都包装在一个类中。

class folderTree {

    function display($dir,$level='') {
        $fileData = fillArrayWithFileNodes( new DirectoryIterator( $dir ) );

        function fillArrayWithFileNodes( DirectoryIterator $dir )
        {
          $data = array();
          foreach ( $dir as $node )
          {
            if ( $node->isDir() && !$node->isDot() )
            {
              $data[$node->getFilename()] = fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );
            }
            else if ( $node->isFile() )
            {
              $data[] = $node->getFilename();
            }
          }
          return $data;
        }
    }
}

但我真的被困在如何使用关卡上。

什么是等级?

-folder
    -childfolder (level1)
        file1
        file2
        -subchildfolder (level2)
            file1
            file2

【问题讨论】:

    标签: php iterator directory


    【解决方案1】:

    您可以从以下代码中复制逻辑:

    <?php
    function getFiles(RecursiveDirectoryIterator $rdi, $depth=0) {
    
        if (!is_object($rdi))
            return;
    
        for ($rdi->rewind();$rdi->valid();$rdi->next()) {
    
            if ($rdi->isDot())
                continue;
    
            if ($rdi->isDir() || $rdi->isFile()) {
    
                for ($i = 0; $i<=$depth;++$i)
                    echo '&nbsp;&nbsp;&nbsp;';
    
                echo $rdi->current().'<br />';
    
                if ($rdi->hasChildren())
                    getFiles($rdi->getChildren(),1+$depth);
            }
        }
    }
    
    $depth = 2;
    getFiles(new RecursiveDirectoryIterator('.'), $depth);
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多