php 如何生成二级目录json,使用PHP根据已解码的JSON创建文件夹/文件结构

例如,我下面有一个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 . "
";

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 . "
";

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁说docker-compose不能水平扩展容器、服务多实例?

❝虽说我已经从docker-compose走上了docker swarm的邪门歪道,目前被迫走在k8s这条康庄大道, 但是我还是喜欢docker-compose简洁有效的部署方式。❞曾其何时docker-compose非常适合开发、测试、快速验证原型,这个小工具让单机部署容器变得简洁…

C++substr()用法

substr()用法: string 需要截取的字符串 a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取) b 要截取的字符串的长度 注意:第3个参数是要截取字符串的长度

.NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)...

33 | 集成事件:使用RabbitMQ来实现EventBus这一节我们来讲解如何通过 CAP 组件和 RabbitMQ 来实现 EventBus要实现 EventBus,我们这里借助了 RabbitMQ,它的整个安装和使用的体验是非常人性化的,如果是在 Windows 下开发的话&#…

nginx php iconv,Nginx +PHP部署一

Nginx PHP部署一Alvin.zeng目录一、安装PHP1、Yum安装需要的包yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurs…

递归算法训练

[蓝桥杯]字母组串-递归[蓝桥杯][基础练习VIP]FJ的字符串-递归

以Blog.Core的方式来打开Abp.vNext

(发现Abp这个logo真像佐助写轮眼)最近自己的框架已经基本的成型了,当然还有很多质疑的地方,比如这些人是这么说的,基本都是原文:你的教程太乱了,和框架代码都不一样(?&am…

算法题目中常见的几种输入小点-gets,cin,scanf,getline,sstream

cin,scanf遇到空格都会停下来。gets可读入空格 例如: 在这里由于要读入空格,我们用gets来读入。 const int N 8; char g[N][N];while(gets(g[0])!NULL) {gets(g[1]);}C关于getline()和getchar()的小点C stringstream输入方式下面这两段代码要注意一下: const in…

php+换行+php+eol,PHP PHP_EOL 换行符

换行符unix系列用 \nwindows系列用 \r\nmac用 \rPHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性如:echoPHP_EOL;//windows平台相当于 echo "\r\n";//unix\linux平台相当于 echo "\n";//mac平台相当于 echo "…

如何做好一个开源项目(一)

做好一个开源项目其实是一件比较费时费力费心的工作,它的最大难点除了代码维护之外,还包括后期的维护和持续的跟进。我曾经做过不少开源项目,但是坚持下来的,目前有信心能够持续维护的也只有Magicodes.IE。这里请允许我来一波硬广…

量子力学问题matlab求解,一个关于量子力学中的matlab的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼syms E U x U1 a a1 a2 k k1 k2 k3 b c d e f g h l S%其中,b c d e f g h l是为计算简明而引入的字符,S为透射系数D与反射系数R之和。Einput(请输入入射电子能量E);Uinput(请输入势垒函数U);a1input(请输入…

洛谷 P1506 拯救oibh总部-dfs染色法

题目背景 oibh总部突然被水淹没了&#xff01;现在需要你的救援…… 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙&#xff0c;用号表示&#xff0c;而一个封闭的号区域洪水是进不去的……现在给出oibh的围墙建设图&#xff0c;问oibh…

Abp商业版 - Identity Server模块

该模块提供了Identity Server的集成和管理功能.建立在IdentityServer4类库之上.管理系统中的客户端,身份资源和API资源(Clients, Identity resources, API resources)设置客户端(Clients)权限.轻松创建标准的身份资源(例如role, profile)创建自定义身份资源(identity resources…

python3 beautifulsoup 表格,使用Python中的BeautifulSoup拉取特定的表数据

匿名用户下面的脚本提取数据并将数据保存到csv文件中。import requestsfrom bs4 import BeautifulSoupimport pandas as pdres requests.get(https://gol.gg/teams/list/season-ALL/split-ALL/region-ALL/tournament-LCS%20Summer%202020/week-ALL/)soup BeautifulSoup(res.t…

洛谷 P1162 填涂颜色-dfs染色法

输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1输出: 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1代码如下: #include <iostream> using namespace std; const int N 40; int mp[N][N], mps[N][N…

【要闻】VMware的双重身份曝光、Kubernetes 1.18发布

作为Kubernetes供应商&#xff0c;你该认识一下VMware的两面性2020年3月中旬&#xff0c;VMware宣布正式发布与Kubernetes相关的产品“ VMware Tanzu”。对于不使用VMware服务器虚拟化基础架构的用户组织&#xff0c;这是否有意义&#xff1f;VMware利益相关者在本公告中描述了…

php mysql unsigned,PHP MySQL 核心

MySQL 是跟 PHP 配套使用的最流行的开源数据库系统。首先&#xff0c;我们可以在浏览器输入localhost打开phpMyAdmin&#xff0c;可以直观的看到我们对数据库操作后的结果以下&#xff0c;我将全部以 面向过程 的方式来像大家讲解PHP操作SQL的过程&#xff1a;$servername &…

15个基本的C#面试问题

原文来自互联网&#xff0c;由长沙DotNET技术社区【笑语】编译。原文来自&#xff1a;https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make1、给定一个int数组&#xff0c;编写方法以统计所有偶数的值。有很多方法可以做到这一点&#xff0c;但是最…

求一到n偶数和值python,几个python练习题

从python公众号里面看到了几道python的练习题&#xff0c;就拿来练练手&#xff0c;结果上手了发现自己还是特别水&#xff0c;不是很难的8道题&#xff0c;我只做出来5道&#xff0c;其中还3道题卡住了&#xff0c;边查边做的。原题链接在这里&#xff1a;http://python.jobbo…

洛谷 P1122 最大子树和-求树的最大子树权值和

输入: 7 -1 -1 -1 1 1 1 0 1 4 2 5 3 6 4 7 5 7 6 7输出: 3代码如下: #include <iostream> #include <vector> using namespace std; const int N 100010; typedef long long LL; LL ans; vector<LL>t[N]; LL w[N];void dfs(int root, int fa) {for (int…

玩转控件:封装Dev的LabelControl和TextEdit

缘由俗话说的好&#xff1a;"工欲善其事必先利其器"&#xff0c;作为软件攻城狮也是同样道理&#xff0c;攻城狮开发的软件目的是简化客户的操作&#xff0c;让客户动动手指就可以完成很多事情&#xff0c;减少人力成本。这也是系统/软件存在的目的。那对于攻城狮来说…