一尘不染

PHP中目录结构的深度递归数组

php

我试图将硬盘上的某些文件夹放入阵列中。

例如,度假图片。假设我们具有以下结构:

  • 套装1
    • 第一组的项目1
    • 第一组的项目2
    • 第1套​​的项目〜
  • 套装2
    • 组2的子集1
    • 组2的子集1的项目1
    • 组2的子集1的项目…
    • 第2组的子集2
    • 随机文件,而不是目录。
  • 套装3

我想要像这样的东西作为数组。
意思是我有1个大数组,在那个数组中有更多数组。每个集合和子集都有自己的数组。

我正在尝试使其看起来像这样:

Array
(
    [Set 1] => Array([0] => Item 1 of Set 1, [1] => Item 1 of Set 1,...)
    [Set 2] => Array([Subnet 1] => Array([0] => Item 1 of Subset 1 of Set 2,[1] => ...), [Subnet 2] => Array([0] => ..., ..., ...), ..., [0] => Random File)
    [set 3] => Array(...)
    ...
)

我碰到了这个:http : //www.the-art-of-
web.com/php/dirlist/

但这不是我想要的。我一直在干预它,但是它给我带来的只有麻烦。

这是一个示例,查看更大分辨率的源代码(显然没有单击…)。 例


阅读 266

收藏
2020-05-29

共1个答案

一尘不染

我建议使用DirectoryIterator构建阵列

这是我快速汇总的一个片段,但是我目前没有可以对其进行测试的环境,因此请准备对其进行调试。

$fileData = fillArrayWithFileNodes( new DirectoryIterator( '/path/to/root/' ) );

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;
}
2020-05-29