Php 将文件和文件夹列成一个数组

Php 将文件和文件夹列成一个数组,php,arrays,directory,subdirectory,Php,Arrays,Directory,Subdirectory,我试图将所有子目录中的所有文件都列成多维数组 例如: 文件结构 Root/index.php Root/folder1/a.jpg Root/folder1/b.jpg 根/文件夹1/c.mov Root/folder2/aa.jpg Root/folder2/bb.jpg 根目录/文件夹2/cc.mov 我正试图得到这样一个数组() $list = array( array( 'type' => 'image', 'fold

我试图将所有子目录中的所有文件都列成多维数组

例如:

文件结构
  • Root/index.php
  • Root/folder1/a.jpg
  • Root/folder1/b.jpg
  • 根/文件夹1/c.mov
  • Root/folder2/aa.jpg
  • Root/folder2/bb.jpg
  • 根目录/文件夹2/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'
     ),

)

我猜您可能会使用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');
函数listAllFolderFiles($dir){
$ffs=斯堪的纳维亚($dir);
回声';
foreach($ffs作为$ff){
如果($ff!='.&&$ff!='.')){
回音“
  • ”。$ff; if(is_dir($dir./'.$ff))listAllFolderFiles($dir./'.$ff); 回音“
  • ”; } } 回声'; } listAllFolderFiles(“您的主目录”);
    您可以使用递归迭代器创建多维数组

     $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); 
    

    你的最后一行有个错误。它应该是
    listAllFolderFiles(“您的主目录”),而不是
    listFolderFiles(“您的主目录”)-否则,它将对未定义的函数产生错误。哦,抱歉,我刚刚更新了..干得好,Liyakat;-)是的,或者我们也可以使用css来提供良好的效果。当然,通常有不止一种方式来美化事物。而你的编程问题是?