2016-07-14 79 views
0

我有一个名为images的目录。可以说路径是循环目录和保存数据

somepath.com/images/ 

在我的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" 
    ] 
    ] 
] 

这样一来,我可以看到有一个文件夹1和这里面是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" 
    ] 
] 

代码将还遍历多个子目录,因此给定第一个块中的结构,它也会创建类似于第二个块的结果:

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