PHP:如何填充数组中的目录结构

sam*_*ach 4 php tree recursion associative-array

我正在开发一个管理面板,显示服务器上特定位置的目录结构.我有一个递归的PHP函数,遍历每个文件和文件夹.我无法弄清楚的是如何将这个目录结构存储在php关联数组中,如下所示:

array[foldername1][0]=file; // if the foldername1 contains a file
array[foldername1][foldername2][0]=file //if foldername1 contains another folder(foldername2) along with the file.
Run Code Online (Sandbox Code Playgroud)

我想遵循的规则是; 一个文件夹应始终是一个键,文件应始终在这样的索引:

array[folder1][folder2][0]=file1;
array[folder1][folder2][1]=file2;
Run Code Online (Sandbox Code Playgroud)

填充此关联数组的函数应该是通用的,因为我们永远不知道目录结构是什么.我想json_encode这个数组回到我的客户端,并在javascript中处理它,这不是一个问题.

如果这是一个不好的方法,请让我知道,可能有更好的方法来做到这一点.我想过使用扁平阵列,但我认为这是一个糟糕的设计.

goa*_*oat 7

$ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__), RecursiveIteratorIterator::CHILD_FIRST);
$r = array();
foreach ($ritit as $splFileInfo) {
   $path = $splFileInfo->isDir()
         ? array($splFileInfo->getFilename() => array())
         : array($splFileInfo->getFilename());

   for ($depth = $ritit->getDepth() - 1; $depth >= 0; $depth--) {
       $path = array($ritit->getSubIterator($depth)->current()->getFilename() => $path);
   }
   $r = array_merge_recursive($r, $path);
}

print_r($r);
Run Code Online (Sandbox Code Playgroud)