使用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 ' ';
echo $rdi->current().'<br />';
if ($rdi->hasChildren())
getFiles($rdi->getChildren(),1+$depth);
}
}
}
$depth = 2;
getFiles(new RecursiveDirectoryIterator('.'), $depth);
?>