Bu soru burada zaten bir cevabı var:
Ben diziyi oluşturmak için DirectoryIterator kullanmanızı tavsiye
İşte gerçek hızlı birlikte attı, ama ben şu anda öyle ayıklamak için hazırlanacak bunu test etmek için bir ortam yok, bir parçacık bulunuyor.
$fileData = fillArrayWithFileNodes( new DirectoryIterator( '/path/to/root/' ) );
function fillArrayWithFileNodes( DirectoryIterator $dir )
{
$data = array();
foreach ( $dir as $node )
{
if ( $node->isDir() && !$node->isDot() )
{
$data[$node->getFilename()] = fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );
}
else if ( $node->isFile() )
{
$data[] = $node->getFilename();
}
}
return $data;
}
Herhangi bir hata işleme olmadan basit bir uygulama:
function dirToArray($dir) {
$contents = array();
# Foreach node in $dir
foreach (scandir($dir) as $node) {
# Skip link to current and parent folder
if ($node == '.') continue;
if ($node == '..') continue;
# Check if it's a node or a folder
if (is_dir($dir . DIRECTORY_SEPARATOR . $node)) {
# Add directory recursively, be sure to pass a valid path
# to the function, not just the folder's name
$contents[$node] = dirToArray($dir . DIRECTORY_SEPARATOR . $node);
} else {
# Add node, the keys will be updated automatically
$contents[] = $node;
}
}
# done
return $contents;
}
Ben, PEAR File_Find paketi ile başarı elde ettik, özellikle the mapTreeMultiple() method. Sizin kod gibi bir şey olacak:
require_once 'File/Find.php';
$fileList = File_Find::mapTreeMultiple($dirPath);
Bu sizin için soruyorsun ne benzer bir dizi döndürür.
Kodunda dayanarak @soulmerge's answer. Ben sadece bazı nit ve yorumlar kaldırılır ve benim başlangıç dizin gibi $startpath
kullanın. (TEŞEKKÜR EDERİZ @ soulmerge!)
function dirToArray($dir) {
$contents = array();
foreach (scandir($dir) as $node) {
if ($node == '.' || $node == '..') continue;
if (is_dir($dir . '/' . $node)) {
$contents[$node] = dirToArray($dir . '/' . $node);
} else {
$contents[] = $node;
}
}
return $contents;
}
$r = dirToArray($startpath);
print_r($r);