-2

すべてのサブディレクトリ内のすべてのファイルを多次元配列にリストしようとしています。

例えば:

ファイル構造

  • ルート/index.php
  • ルート/フォルダ1/a.jpg
  • ルート/フォルダ1/b.jpg
  • ルート/フォルダ1/c.mov
  • ルート/フォルダ2/aa.jpg
  • ルート/フォルダ2/bb.jpg
  • ルート/フォルダ2/cc.mov

このような array() を取得しようとしています...

$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 に答える