2

ルートディレクトリのすべてのファイル名と、各サブフォルダーのすべてのファイル名をphpの配列に入れるにはどうすればよいですか?

4

5 に答える 5

4

scandir()を使用すると、サブディレクトリの再帰関数や、必要なものを実現するための他の多くの例が見つかります。

于 2012-09-09T15:29:38.873 に答える
3

私はいつもとを好んDirectoryIteratorでいRecursiveDirectoryIteratorます。

次に例を示します。

function drawArray(DirectoryIterator $directory)
{
    $result=array();
    foreach($directory as $object)
    {
        if($object->isDir()&&!$object->isDot())
        {
            $result[$object->getFilename()]=drawArray(new DirectoryIterator($object->getPathname()));
        }
        else if($object->isFile())
        {
            $result[]=$object->getFilename();
        }
    }
    return $result;
}
$array=drawArray(new DirectoryIterator('/path'));
print_r($array);
于 2012-09-09T15:39:48.293 に答える
1

[実際にすべてglob()のファイルをスキミングしたい場合は、RAM に哀悼の意を表します] をご覧ください。

于 2012-09-09T15:23:42.957 に答える
1

これが私のやり方です。

/**
    Recursively returns all the items in the given directory alphabetically as keys in an array, optionally in descending order.
    If a key has an array value it's a directory and its items are in the array in the same manner.
*/
function scandir_tree($directory_name, $sort_order = SCANDIR_SORT_ASCENDING, $_recursed = false)
    {
    if (!$_recursed || is_dir($directory_name))
        {
        $items = array_diff(scandir($directory_name, (int) $sort_order), ['.', '..']);
        $tree = [];
        foreach ($items as $item)
            {
            $tree[$item] = scandir_tree($directory_name . $item, $sort_order, true);
            }
        return $tree;
        }
    return $directory_name;
    }
于 2012-09-09T15:30:23.037 に答える
1

これを試して:

$ar=array();
$g=scandir('..');
foreach($g as $x)
{
    if(is_dir($x))$ar[$x]=scandir($x);
    else $ar[]=$x;
}
print_r($ar);
于 2012-09-09T15:35:05.530 に答える