I'm trying to create a PHP recursive function to create a multilevel menu from multi-dimentional array, but still failed.
I have a data as such:
<?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);
?>
So now I have a multi-dimentional array:
(
[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
(
)
)
)
)
)
)
)
)
)
)
My question is, how to produce final data as below:
<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>
using PHP recursive function?
I've been looking into several examples, but unfortunately the given solution and data sample/condition were quite different.
CodePudding user response:
<?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]);
Note, how I had to put the $raw
variable into an array, so that the first foreach
works.