2

次のパスのリストがあります

  • GRUPA131/LFA & その他/lfa sub.zip
  • GRUPA131/LFA他/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
  • 分析表 1.pdf
  • 分析表 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が、前述のように実際に配列を取得する方法がわかりません。

また、パス全体を持つ私の配列は単純な配列です。連想などではありません。

誰かがこれを行う方法を理解するのを手伝ってくれますか?

ありがとう!

4

1 に答える 1

5

最も簡単な方法は再帰関数です。わたしの提案:

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);

小切手:

PHPの再帰関数とは何ですか?

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

于 2013-10-02T15:59:55.297 に答える