如何将嵌套目录结构放入数组或数据库中?

How to get nested directory structure into array or database?

我正在制作一个“照片上传器”项目,可以获取特定文件夹的所有子文件和子目录。
我使用 iterator 获取文件和目录:

$path = dirname(__FILE__).'/';

use RecursiveIteratorIterator as RII;
use RecursiveDirectoryIterator as RDI;
use RecursiveCallbackFilterIterator as RCFI;

$directory = new RDI($path, RDI::SKIP_DOTS);

$filter = new RCFI($directory, function ($current, $key, $iterator) {
    return $current->isDir() || preg_match('/^.+(.jpe?g|.png|.gif)$/i', $current->getPathname()) > 0;
});
$iterator = new RII($filter, RII::SELF_FIRST);

得到之后,我想把它们的结构存入数据库,存入如下table :
column `id` is AUTO_INCREMENT

table `item`
| id | title | type | parent_id |

像Unix一样,一切都是文件,甚至是目录,我使用列type来存储文件夹file,所以我只能用一个table.
例如,我有两个文件和两个文件夹:

test (folder)
 -file1.png
 -subtest (folder)
  --file2.png

我想这样存储它们(只是为了举例,它们的顺序并不重要):

| id |   title   |   type   | parent_id |
-----------------------------------------
| 1  |   test    |  folder  |    null   |
| 2  | file1.png |   file   |     1     |
| 3  |  subtest  |  folder  |     1     |
| 4  | file2.png |   file   |     3     |

我知道怎么得到 我不知道如何将 每个文件夹 及其 父文件夹 结构放入数组,然后像上面那样将它们存储到 table 中

终于找到解决办法了(感谢u/colshrapnel):
最简单的方法是手动维护目录映射。说,插入测试目录后,您将获得 id 并将完整路径存储在数组中,$map[$current->getPathname()] = 1; 等等。获取新条目后,获取 dirname($current->getPathname()) 并根据地图对其进行测试以获取父 ID

因此 test/subtest 应该给你 3