1

タイトルの通り。
ネストされたフォルダーからファイルを取得し、正しく表示するように装飾するにはどうすればよいですか。
ネストされたフォルダーからファイルを取得することに成功しましたが、正しく表示されず、順序付けされていません。

これは私の試みです:

function getfiles($Folder) {
    $dir = opendir($Folder);
    while ($files = readdir($dir)) {
        if ($files == '.' || $files == '..')
            continue;

        if (is_dir($Folder.'/'.$files)) {
            getfiles($Folder.'/'.$files);
        }

        echo $files."<br/>";
    }
}

この関数は正常に動作しますが、結果がうまく表示されず、順序付けられていません。

私はこのようになりたいです:

.folder
   .file
   .file
   .folder2
      .file
      .folder3
         .file
4

1 に答える 1

1

希望する出力が何であるかを述べていません。

たとえば、深さをインデントの形で表示できます。

function getfiles($Folder) {
    static $depth;

    $depth++;

    $dir = opendir($Folder);
    while ($files = readdir($dir)) {
        if ($files == '.' || $files == '..')
            continue;

        if (is_dir($Folder.'/'.$files)) {
            getfiles($Folder.'/'.$files);
        }

        echo str_repeat('- ', $depth).$files."<br/>";
    }

    $depth--;
}

または、HTML を使用して入れ子構造を作成することもできます。

function getfiles($Folder) {
    echo '<ul>';
    $dir = opendir($Folder);
    while ($files = readdir($dir)) {
        if ($files == '.' || $files == '..')
            continue;

        if (is_dir($Folder.'/'.$files)) {
            getfiles($Folder.'/'.$files);
        }

        echo '<li>'.$files."</li>";
    }
    echo '</ul>';
}

ソートされた出力が必要な場合は、次を使用しますscandir()

function getfiles($Folder) {
    $dir = scandir($Folder, 0); // 0 for ascending order, in PHP from 5.4 use SCANDIR_SORT_ASCENDING
    foreach ($dir as $files) {
        if ($files == '.' || $files == '..')
            continue;

        if (is_dir($Folder.'/'.$files)) {
            getfiles($Folder.'/'.$files);
        }

        echo $files."<br/>";
    }
}
于 2012-09-22T12:30:11.033 に答える