【问题标题】:PHP array of paths as HTML hierarchyPHP 路径数组作为 HTML 层次结构
【发布时间】:2013-10-08 23:05:58
【问题描述】:

我有以下路径列表

  • GRUPA131/LFA & others/lfa sub.zip
  • GRUPA131/LFA & others/lfandrei.pdf
  • GRUPA131/Limbaje formale (Liviu Dinu).pdf
  • GRUPA131/desktop.ini
  • GRUPA131/lfa/lab1/1-Theodors MacBook Air.cc
  • GRUPA131/lfa/lab1/1.cc
  • GRUPA131/lfa/lab1/1.cc-Theodors MacBook Air.out
  • GRUPA131/lfa/lab1/1.cc.out
  • GRUPA131/lfa/lab1/2.cc
  • GRUPA131/lfa/lab1/input3.in
  • GRUPA131/lfa/lab1/tema1.zip
  • alexandru-lamba.png
  • alexandru-lamba_v2.png
  • analiza carte 1.pdf
  • analiza carte 2.pdf
  • biblsit.docx
  • center.js

作为字符串,我想将它们转换为可使用 HMTL 表示的文件夹层次结构。所以,对于每个文件夹,我想列出它的文件和子文件夹等等,直到列表完成。

php 数组层次结构最好如下:

  $dirs['dirname'] -> file 1
  $dirs['dirname'] -> file 2
  $dirs['dirname'] -> file 3
  $dirs['dirname'] -> Folder
  $dirs['dirname']['folder'] -> file 1
  $dirs['dirname']['folder'] -> file 2..

我试图用'/' (PATH_DELIMITER) 分割每个字符串,但我不知道如何像前面提到的那样实际得到一个数组。

另外,我的数组包含完整的路径,是一个简单的数组。不是关联的。

有人可以帮我弄清楚怎么做吗?

谢谢!

【问题讨论】:

    标签: php html arrays


    【解决方案1】:

    最简单的方法是递归函数。我的建议:

    function build_folder_structure(&$dirs, $path_array) {
        if (count($path_array) > 1) {
            if (!isset($dirs[$path_array[0]])) {
                $dirs[$path_array[0]] = array();
            }
    
            build_folder_structure($dirs[$path_array[0]], array_splice($path_array, 1));
        } else {
            $dirs[] = $path_array[0];
        }
    }
    
    $strings = array(
        'GRUPA131/LFA & others/lfa sub.zip',
        'GRUPA131/LFA & others/lfandrei.pdf',
        'GRUPA131/Limbaje formale (Liviu Dinu).pdf',
        'GRUPA131/desktop.ini',
        'GRUPA131/lfa/lab1/1-Theodors MacBook Air.cc',
        'GRUPA131/lfa/lab1/1.cc',
        'GRUPA131/lfa/lab1/1.cc-Theodors MacBook Air.out',
        'GRUPA131/lfa/lab1/1.cc.out',
        'GRUPA131/lfa/lab1/2.cc',
        'GRUPA131/lfa/lab1/input3.in',
        'GRUPA131/lfa/lab1/tema1.zip',
        'alexandru-lamba.png',
        'alexandru-lamba_v2.png',
        'analiza carte 1.pdf',
        'analiza carte 2.pdf',
        'biblsit.docx',
        'center.js'
    );
    
    $dirs = array();
    
    foreach ($strings As $string) {
        $path_array = explode('/',$string);
    
        build_folder_structure($dirs,$path_array);
    }
    
    print_r($dirs);
    

    检查:

    What is a RECURSIVE Function in PHP?

    http://php.net/manual/en/language.references.pass.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2013-01-22
      相关资源
      最近更新 更多