2

您好我遇到的问题是我有一个字符串数组列表,其中包含我服务器上 .txt 文件的路径。

例子:

// list all textfiles
$list = findFiles(dirname(__FILE__), array ("txt") );
// sort list
array_multisort($list["txt"], SORT_ASC, SORT_STRING );
// iterate through list and print out found files as ul-li list
foreach ($list["txt"] as $file_entry) {

echo '<li>$file_entry</li>\n';

}

这让我得到了类似的东西:

<li>path1\path\chek.txt</li>
<li>path1\path\test\check2.txt</li>
<li>path1\path1\test\check.txt</li>
<li>path2\test\pt\check1.txt</li>
<li>path2\test\pt\check2.txt</li>
<li>path2\test\check2.txt</li>
<li>path2\path2\check.txt</li>
<li>path2\path3\dir.txt</li>
<li>path2\path3\test\check.txt</li>
<li>path3\path3\test\check1.txt</li>

我想将该数组“转换”为看起来像目录树的东西(以便以后使用一些 jquery 插件 [例如http://filamentgroup.com/examples/jquery-tree-control/]):

<ul>
<li>path1
<ul>
    <li>path</li>
       <ul> 
          <li><a href="$_SERVER[php_self]?file=fullpathtofile">check.txt</a></li>
       </ul>
    <li>path1</li>
...

所以问题是如何从我的数组中制作这样一个目录列表?

4

2 回答 2

1

这就是我得到的,通过将路径转换为嵌套数组,然后递归合并它们,然后使用递归函数格式化以将其打印为列表;

$list['txt'] = array(
    'path1\path\chek.txt',
    'path1\path\test\check2.txt',
    'path1\path1\test\check.txt',
    'path2\test\pt\check1.txt',
    'path2\test\pt\check2.txt',
    'path2\test\check2.txt',
    'path2\path2\check.txt',
    'path2\path3\dir.txt',
    'path2\path3\test\check.txt',
    'path3\path3\test\check1.txt'
);

$paths = array();
foreach ($list['txt'] as $file_entry) {
    $path = explode('\\', $file_entry);
    $pathArr = $file_entry;
    for ($i = count($path) - 1; $i >= 0; $i--) {
        $pathArr = array($path[$i] => $pathArr);
    }
    $paths = array_merge_recursive($paths, $pathArr);
}

function to_list($paths, $depth = 0) {
    echo str_repeat("\t", $depth) . "<ul>\n";
    foreach ($paths as $entry => $value) {
        echo str_repeat("\t", $depth + 1) . '<li>';
        if (is_array($value)) {
            echo "$entry\n";
            to_list($value, $depth + 2);
            echo "\n" . str_repeat("\t", $depth + 1);
        } else {
            echo "<a href=\"{$_SERVER['PHP_SELF']}?file=$value\">$entry</a>";
        }
        echo "</li>\n";
    }
    echo str_repeat("\t", $depth) . "</ul>\n";
}
to_list($paths);
于 2013-06-11T15:04:33.003 回答
0

我认为您最好使用“\”作为分隔符将每个字符串“分解”到一个数组(),而不是将所有表合并到一个多数组中。

['path1']=>['path']=>"chek.txt"
        =>['path']=>['test']=>"check2.txt"
        =>['path']=>['test']=>"check.txt"

...

"<ul>"最后为您添加标签的每个新数组!

于 2013-06-11T14:55:08.030 回答