【发布时间】:2016-01-05 21:13:41
【问题描述】:
我需要有关 PHP 递归的帮助。我需要从 JSON 创建文件夹结构。这就是它的样子,
{
"parent":{
"url":"parent.html",
"name":"Parent",
"children":[
{
"type":"folder",
"name":"Folder 1",
"url":"folder1.html",
"children":[
{
"type":"file",
"name":"File 1",
"url":"folder1-file1.html",
"children":[
]
},
{
"type":"file",
"name":"File 2",
"url":"folder1-file2.html",
"children":[
]
},
{
"type":"file",
"name":"File 2",
"url":"folder1-file3.html",
"children":[
]
}
]
},
{
"type":"folder",
"name":"Folder 2",
"url":"folder2.html",
"children":[
]
},
{
"type":"folder",
"name":"Folder 3",
"url":"folder3.html",
"children":[
{
"type":"file",
"name":"Folder3 File1",
"url":"folder3-file1",
"children":[
]
},
{
"type":"folder",
"name":"Folder3 Folder1",
"url":"folder3-file1",
"children":[
{
"type":"folder",
"name":"Folder3 Folder1 Folder1",
"url":"folder3-folder1-folder1",
"children":[
{
"type":"file",
"name":"Folder3 Folder1 Folder1 File1",
"url":"folder3-folder1-folder1-file1",
"children":[
]
},
{
"type":"file",
"name":"Folder3 Folder1 Folder1 File2",
"url":"folder3-folder1-folder1-file2",
"children":[
]
}
]
}
]
}
]
}
]
}
}
无论哪里有一个文件夹,它都应该创建一个新的<ul>,其类为folder,名称在<a>标签内,如果有任何类型为file的子级,它应该创建一个新的<li> <a> 里面的名字等等。
<ul class="folder">
<li>
<a>Parent</a>
<ul class="folder">
<li>
<a>Folder 1</a>
<ul class="folder">
<li>
<a>File 1</a>
</li>
<li>
<a>File 2</a>
</li>
<li>
<a>File 2</a>
</li>
</ul>
</li>
<li>
<a>Folder 2</a>
</li>
<li>
<a>Folder 3</a>
<ul class="folder">
<li>
<a>Folder3 File1</a>
</li>
<li>
<a>Folder3 Folder1</a>
<ul class="folder">
<li>
<a>Folder3 Folder1 Folder1</a>
<ul class="folder">
<li>
<a>Folder3 Folder1 Folder1 File1</a>
</li>
<li>
<a>Folder3 Folder1 Folder1 File2</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
我已经有了一个即使没有孩子也能循环的函数,
private function menuBuilder($menu_array, $is_sub = false)
{
$attr = (!$is_sub) ? ' id="menu"' : ' class="submenu"';
$menu = "<ul$attr>";
$sub = '';
foreach ($menu_array as $child) {
foreach ($child as $key => $val) {
if (is_array($val)) {
$sub = $this->menuBuilder($val, true);
} else {
$sub = null;
$$key = $val;
}
}
$menu .= "<li><a>".$child['name']."</a>$sub</li>";
unset($url, $display, $sub);
}
return $menu . "</ul>";
}
请帮忙优化一下。
【问题讨论】:
-
你试过什么?你得到什么具体的错误?我相信您知道,但让我提醒您,StackOverflow 用户不会为您编写代码,我们会帮助解决具体问题。
-
@T3H40 好吧,我知道,我会忘记添加该代码,我现在正在添加:)
-
太棒了。请不要忘记描述究竟是什么不工作:)