微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在制作一个“照片上传”项目,可以获取特定文件夹的所有子文件和子目录。
我使用 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);

得到它们后,我想将它们的结构存储到数据库中,放入下表中:
column `id` is AUTO_INCREMENT

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

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

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     |

我知道如何获得 我不知道如何将每个文件及其文件结构放入数组中,然后将它们存储到上面的表格中

解决方法

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

因此 test/subtest 应该给你 3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。