php将字符串数组拆分为<;ul>&书信电报;李>;

php将字符串数组拆分为<;ul>&书信电报;李>;,php,Php,您好,我的问题是,我有一个字符串数组列表,其中包含服务器上.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

您好,我的问题是,我有一个字符串数组列表,其中包含服务器上.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';

}
//列出所有文本文件
$list=findFiles(dirname(_文件),数组(“txt”);
//排序表
数组\多排序($list[“txt”]、排序\ ASC、排序\字符串);
//遍历列表并将找到的文件打印为ul li列表
foreach($list[“txt”]作为$file\u条目){
echo'
  • $file\u条目
  • \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>
    
  • path1\path\chek.txt
  • 路径1\path\test\check2.txt
  • path1\path1\test\check.txt
  • 路径2\test\pt\check1.txt
  • 路径2\test\pt\check2.txt
  • 路径2\test\check2.txt
  • path2\path2\check.txt
  • 路径2\path3\dir.txt
  • 路径2\path3\test\check.txt
  • path3\path3\test\check1.txt
  • 我想将该数组“转换”成类似于目录树的东西(以便以后使用一些jquery插件[例如]:

    • 路径1
      • 路径
      • 路径1
      • ...

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

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

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


    最后,为每个新数组添加一个
    标记!

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

    $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);
    
    $list['txt']=数组(
    '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'
    );
    $path=array();
    foreach($list['txt']作为$file\u条目){
    $path=explode(“\\”,$file\u entry);
    $pathArr=$file\u条目;
    对于($i=count($path)-1;$i>=0;$i--){
    $pathArr=数组($path[$i]=>$pathArr);
    }
    $paths=数组\合并\递归($paths,$pathArr);
    }
    函数到_列表($path,$depth=0){
    回声str\u重复(“\t”,深度)。“
      \n”; foreach($entry=>$value的路径){ 回声str_重复(“\t”,$depth+1)。”
    • ; if(是_数组($value)){ 回显“$entry\n”; to_列表($value,$depth+2); 回声“\n”.str\u重复(“\t”,$depth+1); }否则{ 回声“; } 回声“
    • \n”; } 回声重复(“\t”,$depth)。“
    \n”; } to_列表($path);
    谢谢,这是有效的。唯一缺少的是“echo”$entry”语句中文件的完整路径,知道如何实现吗?是的,应该可以通过将完整文件路径指定为
    $pathArr
    末尾的值,然后在href中使用该路径。我将更新我的答案以进行演示。
    $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);