【问题标题】:Looping directories and saving data循环目录和保存数据
【发布时间】:2016-11-17 13:46:58
【问题描述】:

我有一个名为 images 的目录。假设路径是

somepath.com/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
                );
            }
        }
    }
}

我目前遇到的问题是第一个目录数据被覆盖。此外,我留下的数组似乎包含文件夹 2 的所有 4 个图像。我怎样才能改变我所拥有的 为了产生所需的输出?

谢谢

【问题讨论】:

    标签: php arrays directory


    【解决方案1】:

    虽然使用数组索引作为文件夹名称的结构略有不同,但您可以使用以下代码: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"
      ]
    ]
    

    【讨论】:

      【解决方案2】:

      您可能想查看此处的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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2019-10-09
        相关资源
        最近更新 更多