2016-07-14 8 views
0

私はimagesというディレクトリを持っています。パスはディレクトリをループしてデータを保存する

somepath.com/images/ 

です。my imagesディレクトリ内にはいくつかのフォルダがあります。だから私は持っていると言うことができます

somepath.com/images/folder1 
somepath.com/images/folder2 

これらのフォルダのそれぞれにはいくつかの画像があります。だから私は持っていると言うことができます

somepath.com/images/folder1/img1.png 
somepath.com/images/folder1/img2.png 
somepath.com/images/folder2/img1.png 
somepath.com/images/folder2/img2.png 

私はこれらのすべてのデータを含む配列を構築しようとしています。私は、配列がこの方法でこの

array:2 [▼ 
    "directories" => array:1 [▼ 
    "Name" => "folder1" 
    ] 
    "files" => array:14 [▼ 
    0 => array:1 [▼ 
     "Name" => "img1.png" 
    ] 
    2 => array:1 [▼ 
     "Name" => "img2.png" 
    ] 
    ] 
] 
array:2 [▼ 
    "directories" => array:1 [▼ 
    "Name" => "folder2" 
    ] 
    "files" => array:14 [▼ 
    0 => array:1 [▼ 
     "Name" => "img1.png" 
    ] 
    2 => array:1 [▼ 
     "Name" => "img2.png" 
    ] 
    ] 
] 

のようなものを見て期待し、私はそこのfolder1であり、この内部には、IMG1とIMG2で見ることができます。この配列を生成するために、私は現在ベースディレクトリをスキャンしてフォルダ名を取得しています。私はその後、ファイル名を取得するためにフォルダをループします。これは現在私が持っているものです

$data = array(); 
$directories = scandir("somepath.com/images/"); 

foreach($directories as $directory){ 
    if($directory=='.' or $directory=='..'){ 
     continue; 
    } else{ 
     $data["directories"] = array(
      "Name" => $directory 
     ); 

     $dirFiles = scandir("somepath.com/images/" . $directory); 
     foreach($dirFiles as $file){ 
      if($file=='.' or $file=='..'){ 
       continue; 
      } else { 
       $data["files"][] = array(
        "Name" => $file 
       ); 
      } 
     } 
    } 
} 

問題は、私が現時点では最初のディレクトリデータを上書きすることです。さらに、私が残している配列は、folder2の4つの画像すべてを持つようです。どのように私は 希望の出力を生成するために何を変更することができますか?

おかげ

答えて

2

構造は、あなたがこのコードを使用することができ、フォルダ名として配列のインデックスを使用して、わずかに異なっているものの:Deep recursive array of directory structure in PHP のような配列を生成します:

array:2 [ 
    "folder1" => array:2 [ 
    "img1.png", 
    "img2.png" 
    ], 
    "folder2" => array:2 [ 
    "img1.png", 
    "img2.png" 
    ] 
] 

コードをしますまた、複数のサブディレクトリを横断するので、最初のブロックの構造を考慮すると、2番目のブロックのような結果も生成されます。

somepath.com/images/folder1/img1.png 
somepath.com/images/folder1/img2.png 
somepath.com/images/folder1/subfolder1/img1.png 
somepath.com/images/folder1/subfolder1/img2.png 
somepath.com/images/folder2/img1.png 
somepath.com/images/folder2/img2.png 
somepath.com/images/folder2/subfolder1/img1.png 
somepath.com/images/folder2/subfolder1/img2.png 

- 利回り:

array:2 [ 
    "folder1" => array:3 [ 
    "subfolder1" => array:2 [ 
     "img1.png", 
     "img2.png" 
    ] 
    "img1.png", 
    "img2.png" 
    ], 
    "folder2" => array:3 [ 
    "subfolder1" => array:2 [ 
     "img1.png", 
     "img2.png" 
    ] 
    "img1.png", 
    "img2.png" 
    ] 
] 
1

あなたがここで見つけるFolderScannerクラスをチェックアウトすることができます。おそらくそれはあなたのトリックを行います。プロジェクトに含めることができ、そのようにすることができます:

<?php 
     require_once "FolderScanner.php"; 

     // EXTRACT ALL IMAGE FILES IN "IMAGES" DIRECTORY 
     // REPLACE THE PATH ACCORDING TO YOUR PROJECT'S STRUCTURE 
     $pathToImagesDirectory = "somepath.com/images/"; 
     $imgFilesInImagesDir = FolderScanner::scan_folder_for_image_files($pathToImagesDirectory); 

     // $THE $imgFilesInImagesDir CONTAINS THE STRUCTURED DATA... 
     // var_dump($imgFilesInImagesDir); 
関連する問題