Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP实现数组中的文件夹树_Php_Iterator_Directory - Fatal编程技术网

使用PHP实现数组中的文件夹树

使用PHP实现数组中的文件夹树,php,iterator,directory,Php,Iterator,Directory,我正在尝试显示文件夹树。它工作得很好。下面是代码 $fileData = fillArrayWithFileNodes( new DirectoryIterator( $dir ) ); function fillArrayWithFileNodes( DirectoryIterator $dir ) { $data = array(); foreach ( $dir as $node ) { if ( $node->i

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

$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
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);
?>