0

ファイル名のリストをファイルツリーに簡単に変換するために使用できるライブラリまたはプラグインはありますか?

たとえば、テキストから読み取ったファイル名のリストを含む配列があるとします。

C\Folder1\Flower.jpg
C\Folder1\Monkey.jpg
C\Folder1\Hello.jpg
C\Folder2\Binkie.txt
C\Folder2\Spike.png
C\Folder3\Django.jpg
C\Folder3\Tessje.tiff

上記のファイル名のリストを filetree に表示するにはどうすればよいですか? 私が見たファイルツリー プラグインのほとんどは、実際のファイルとフォルダーの構造を必要とするか、理解するのが非常に複雑です。

4

1 に答える 1

1

次のような配列がある場合:

array(
    'c' => array(
        'Folder1' => array(
            'Flower.jpg',
            'Monkey.jpg',
            ...
        ),
        'Folder2' => array(
            'Binkie.txt',
            ...
        ),
    ),
),

再帰関数を使用できます:

<?php

$arr = array(
    'c' => array(
        'Folder1' => array(
            'Flower.jpg',
            'Monkey.jpg',
            //...
        ),
        'Folder2' => array(
            'Binkie.txt',
            //...
        ),
    ),
);

function drawTree($container, $nesting = 0)
{
    foreach ($container as $folder => $sub) {
        if (is_array($sub)) {
            echo str_repeat('.', $nesting) . $folder . '<br>';

            drawTree($sub, $nesting + 1);
        } else {
            echo str_repeat('.', $nesting) . $sub . '<br>';
        }
    }
}

drawTree($arr);

パスを配列ツリーに変換するには、これを使用します。

$arr = array(
    'C/Folder1/Flower.jpg',
    'C/Folder1/Monkey.jpg',
    'C/Folder1/Hello.jpg',
    'C/Folder2/Binkie.txt',
    'C/Folder2/Spike.png',
    'C/Folder3/Django.jpg',
    'C/Folder3/Tessje.tiff',
);

$result = array();

foreach ($arr as $file) {
    $exp = explode('/', $file);
    $curr = &$result;

    while (true) {
        $chunk = array_shift($exp);

        if (empty($exp)) {
            $curr[] = $chunk;
            break;
        }

        if (!isset($curr[$chunk])) {
            $curr[$chunk] = array();
        }
        $curr = &$curr[$chunk];
    }
}

var_dump($result);
于 2014-07-02T11:47:19.207 に答える