php - 从php中的完整路径创建文件树

标签 php file tree directory treeview

我正在尝试从完整路径字符串创建某种文件树。

这是我使用的 php 类给我的:

/RootFolder/Folder1/File1.doc
/RootFolder/Folder1/SubFolder1/File1.txt
/RootFolder/Folder2/SubFolder1/File2.txt
/RootFolder/Folder2/SubFolder1/SubSubFolder1/File4.doc

我想我可以做一个像这样的数组:

array 
(
 "RootFolder" => array 
                ("Folder1" => array
                             ("FILE" => "File1.doc"
                              "SubFolder1" => "File1.txt"
                              "SubFolder1" => "File2.txt"                                  
                             )
                 "Folder2" => array
                             (
                              ...
                              )
                 )             
  )

最终用 <li> 得到这个结果或者在 <table> :

RootFolder/
     |_ Folder1/
     |        |_ SubFolder1/
     |        |           |_ File1.txt
     |        |           |_ File2.txt
     |        |_ File1.doc
     |
     |_ Folder2/
              |_ SubFolder1/
                          |_ SubSubFolder1/
                                         |_ File2.txt

我坚持这个是因为我有点困惑,当然我不是开发人员..

是否有其他方法可以做到这一点?我想我将有大约 >10 000 个文件字符串在加载页面时继续。

编辑:

事实上,我有一个 php 对象返回我这样的数组:

Array
(
[0] => Transmission\Model\File Object
    (
        [name:protected] => RootFolder/Folder1/File1.jpg
        [size:protected] => 13324
        [completed:protected] => 13324
        [client:protected] => 
    )

[1] => Transmission\Model\File Object
    (
        [name:protected] => RootFolder/Folder1/File2.mp3
        [size:protected] => 10383488
        [completed:protected] => 10383488
        [client:protected] => 
    )
[2] ...
)

我想做的是用当前文件的名称、大小和状态制作某种文件树表。我是基于这个 http://labs.abeautifulsite.net/archived/phpFileTree/demo/demo_classic.php .

有了这个对象,可以使用 $var->getName()、$var->getsize() 和 $var->isDone() 检索详细信息。

最佳答案

strtok 会拯救你。

<?php

$input = [
  '/RootFolder/Folder1/File1.doc',
  '/RootFolder/Folder1/SubFolder1/File1.txt',
  '/RootFolder/Folder1/SubFolder1/File2.txt',
  '/RootFolder/Folder2/SubFolder1/File2.txt',
  '/RootFolder/Folder2/SubFolder1/SubSubFolder1/File4.doc',
];

function parseInput($input) {
  $result = array();

  foreach ($input AS $path) {
    $prev = &$result;

    $s = strtok($path, '/');

    while (($next = strtok('/')) !== false) {
      if (!isset($prev[$s])) {
        $prev[$s] = array();
      }

      $prev = &$prev[$s];
      $s = $next;
    }

    $prev[] = $s;

    unset($prev);
  }

  return $result;
}

var_dump(parseInput($input));

输出:

array(1) {
  ["RootFolder"]=>
  array(2) {
    ["Folder1"]=>
    array(2) {
      [0]=>
      string(9) "File1.doc"
      ["SubFolder1"]=>
      array(2) {
        [0]=>
        string(9) "File1.txt"
        [1]=>
        string(9) "File2.txt"
      }
    }
    ["Folder2"]=>
    array(1) {
      ["SubFolder1"]=>
      array(2) {
        [0]=>
        string(9) "File2.txt"
        ["SubSubFolder1"]=>
        array(1) {
          [0]=>
          string(9) "File4.doc"
        }
      }
    }
  }
}

然后你就可以随心所欲地使用这个数组了。

关于php - 从php中的完整路径创建文件树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889469/

相关文章:

php - WebMatrix PHP 查询不起作用

php - 如何使用 PHP 更新 mysql 中的数据?

php - 将数据数组传递给 PHP 脚本,并将其插入到 mysql

c - 在 C 中解析文件以读取字符

C#:在没有管理权限的情况下从文件中删除只读属性

C 和字符串处理

tree - 在PROLOG中查找二叉树中的元素

php - 使用 PHP 列出在 mySQL 数据库中找到的日期

c# - 使用c#传输文件

javascript - jqGrid树自动加载搞砸了