-2

我正在尝试将所有子目录中的所有文件列出到一个多维数组中。

例如:

文件结构

  • 根目录/index.php
  • 根目录/folder1/a.jpg
  • 根目录/folder1/b.jpg
  • 根目录/folder1/c.mov
  • 根目录/folder2/aa.jpg
  • 根目录/folder2/bb.jpg
  • 根目录/folder2/cc.mov

我正在尝试获得这样的数组()...

$list = array(

     array(
            'type' => 'image',
            'folder'=> 'folder1',
            'imgs' => array('a.jpg', 'b.jpg')
     ),

     array(
            'type' => 'video',
            'folder'=> 'folder1',
            'video' => 'c.mov'
     ),

    array(
            'type' => 'image',
            'folder'=> 'folder2',
            'imgs' => array('aa.jpg', 'bb.jpg')
     ),

     array(
            'type' => 'video',
            'folder'=> 'folder2',
            'video' => 'cc.mov'
     ),

)
4

2 回答 2

1

我猜你可能会使用 Scandir 函数来列出文件和文件夹以及特定目录。使用下面的递归函数,你可以得到你的结果。

function listAllFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ol>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listAllFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
    }
    echo '</ol>';
}

listAllFolderFiles('Your main dir');
于 2013-06-18T04:00:55.897 回答
0

您可以使用 RecursiveIterator,创建一个多维数组....

 $path = realpath('Root/');
 $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST); 

 $yourArray = array(); 

 foreach ($it as $FileInfo) { 
   $path = $FileInfo->isDir() 
     ? array($FileInfo->getFilename() => array()) 
     : array($FileInfo->getFilename()); 

  for ($depth = $it->getDepth() - 1; $depth >= 0; $depth--) { 
   $path = array($it->getSubIterator($depth)->current()->getFilename() => $path); 
  } 
 $yourArray = array_merge_recursive($yourArray, $path); 
 } 

 print_r($yourArray); 
于 2013-06-18T04:06:34.983 回答