使用递归将 PHP 多维数组转换为多级菜单?
Convert PHP multidimentional array to multilevel menu using recursive?
我正在尝试创建一个 PHP 递归函数来从多维数组创建多级菜单,但仍然失败。
我有这样的数据:
<?php
$json = '{"id":1,"name":"john","member":[{"id":9,"name":"jane","member":[]},{"id":10,"name":"lorem","member":[{"id":12,"name":"ipsum","member":[{"id":99,"name":"dolor","member":[]},{"id":109,"name":"sit","member":[{"id":999,"name":"rose","member":[]}]}]}]}]}';
$raw = json_decode($json, true);
?>
所以现在我有了一个多维数组:
(
[id] => 1
[name] => john
[member] => Array
(
[0] => Array
(
[id] => 9
[name] => jane
[member] => Array
(
)
)
[1] => Array
(
[id] => 10
[name] => lorem
[member] => Array
(
[0] => Array
(
[id] => 12
[name] => ipsum
[member] => Array
(
[0] => Array
(
[id] => 99
[name] => dolor
[member] => Array
(
)
)
[1] => Array
(
[id] => 109
[name] => sit
[member] => Array
(
[0] => Array
(
[id] => 999
[name] => rose
[member] => Array
(
)
)
)
)
)
)
)
)
)
)
我的问题是,如何生成如下最终数据:
<ul>
<li>john
<ul>
<li>jane</li>
<li>lorem
<ul>
<li>ipsum
<ul>
<li>dolor</li>
<li>sit
<ul>
<li>rose</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
使用PHP递归函数?
我一直在研究几个例子,但不幸的是给定的解决方案和数据 sample/condition 完全不同。
<?php
$json = '{"id":1,"name":"john","member":[{"id":9,"name":"jane","member":[]},{"id":10,"name":"lorem","member":[{"id":12,"name":"ipsum","member":[{"id":99,"name":"dolor","member":[]},{"id":109,"name":"sit","member":[{"id":999,"name":"rose","member":[]}]}]}]}]}';
$raw = json_decode($json, true);
//var_dump($raw);
function outputSubmenu($items) {
echo '<ul>';
foreach ($items as $data) {
echo '<li>';
echo $data['name'];
if (count($data['member'])) {
outputSubmenu($data['member']);
}
echo '</li>';
}
echo '</ul>';
}
echo outputSubmenu([$raw]);
请注意,我必须如何将 $raw
变量放入数组中,以便第一个 foreach
起作用。
我正在尝试创建一个 PHP 递归函数来从多维数组创建多级菜单,但仍然失败。
我有这样的数据:
<?php
$json = '{"id":1,"name":"john","member":[{"id":9,"name":"jane","member":[]},{"id":10,"name":"lorem","member":[{"id":12,"name":"ipsum","member":[{"id":99,"name":"dolor","member":[]},{"id":109,"name":"sit","member":[{"id":999,"name":"rose","member":[]}]}]}]}]}';
$raw = json_decode($json, true);
?>
所以现在我有了一个多维数组:
(
[id] => 1
[name] => john
[member] => Array
(
[0] => Array
(
[id] => 9
[name] => jane
[member] => Array
(
)
)
[1] => Array
(
[id] => 10
[name] => lorem
[member] => Array
(
[0] => Array
(
[id] => 12
[name] => ipsum
[member] => Array
(
[0] => Array
(
[id] => 99
[name] => dolor
[member] => Array
(
)
)
[1] => Array
(
[id] => 109
[name] => sit
[member] => Array
(
[0] => Array
(
[id] => 999
[name] => rose
[member] => Array
(
)
)
)
)
)
)
)
)
)
)
我的问题是,如何生成如下最终数据:
<ul>
<li>john
<ul>
<li>jane</li>
<li>lorem
<ul>
<li>ipsum
<ul>
<li>dolor</li>
<li>sit
<ul>
<li>rose</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
使用PHP递归函数?
我一直在研究几个例子,但不幸的是给定的解决方案和数据 sample/condition 完全不同。
<?php
$json = '{"id":1,"name":"john","member":[{"id":9,"name":"jane","member":[]},{"id":10,"name":"lorem","member":[{"id":12,"name":"ipsum","member":[{"id":99,"name":"dolor","member":[]},{"id":109,"name":"sit","member":[{"id":999,"name":"rose","member":[]}]}]}]}]}';
$raw = json_decode($json, true);
//var_dump($raw);
function outputSubmenu($items) {
echo '<ul>';
foreach ($items as $data) {
echo '<li>';
echo $data['name'];
if (count($data['member'])) {
outputSubmenu($data['member']);
}
echo '</li>';
}
echo '</ul>';
}
echo outputSubmenu([$raw]);
请注意,我必须如何将 $raw
变量放入数组中,以便第一个 foreach
起作用。