如何将嵌套目录结构放入数组或数据库中?
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
我正在制作一个“照片上传器”项目,可以获取特定文件夹的所有子文件和子目录。
我使用 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