【问题标题】:How to get nested directory structure into array or database?如何将嵌套目录结构放入数组或数据库中?
【发布时间】:2021-07-26 22:52:09
【问题描述】:

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

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

【问题讨论】:

    标签: php recursion iterator


    【解决方案1】:

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

    因此 test/subtest 应该给你 3

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2015-08-14
      相关资源
      最近更新 更多