ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用PHP根据已解码的JSON创建文件夹/文件结构

2019-10-27 22:29:53  阅读:169  来源: 互联网

标签:loops arrays json php recursion


例如,我下面有一个build.json文件.包含我在JSON中创建的基本文件夹/文件结构.

  {
    "folders": [
        {
            "name": "folder-a",
            "files": [
                {
                    "name": "file-a.html"
                },
                {
                    "name": "file-b.html"
                }
            ],
            "folders": [
                {
                    "name": "sub-folder-a",
                    "files": [
                        {
                            "name": "sub-file-a.html"
                        },
                        {
                            "name": "sub-file-b.html"
                        }
                    ]
                }
            ]
        },
        {
            "name": "folder-b",
            "files": [
                {
                    "name": "file-a.html"
                },
                {
                    "name": "file-b.html"
                }
            ]
        }
    ]
}

现在,我在下面创建了简单的PHP代码,可以遍历数组的第一部分.然后,当然,如果我继续在第一个foreach中进行foreach循环,则可以继续遍历数组.问题是我不知道阵列中将有多少个文件夹/文件.关于如何不知道循环多少就可以继续循环的任何想法?谢谢!

$json = file_get_contents('build.json');

$decode = json_decode($json);

foreach($decode as $key => $val){
    foreach($val as $valKey => $data){
        var_dump($data);
    }
}

解决方法:

这是一个使用递归的工作脚本:

$json = file_get_contents('build.json');
$folders = json_decode($json);

function buildDirs($folders, $path = null){
  $path = $path == null ? "" : $path . "/";

  foreach($folders as $key => $val){
     mkdir($path.$val->name);
     echo "Folder: " . $path . $val->name . "<br>";

     if(!empty($val->files)){
        foreach($val->files as $file){
           //Create the files inside the current folder $val->name
           echo "File: " . $path . $val->name . "/" . $file->name . "<br>";
           file_put_contents($path . $val->name . "/". $file->name, "your data");
        }
     }

     if(!empty($val->folders)){ //If there are any sub folders, call buildDirs again!
        buildDirs($val->folders, $path . $val->name);
     }
  }
}

buildDirs($folders->folders); //Will build from current directory, otherwise send the path without trailing slash /var/www/here

记住要对根文件夹设置正确的权限.

标签:loops,arrays,json,php,recursion
来源: https://codeday.me/bug/20191027/1947620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有