我正在尝试从3d数组中创建一个html列表:
<?php
$items = [
0 => [
'id' => 100,
'parent_id' => 0,
'url' => 'Home',
'children' => []
],
1 => [
'id' => 101,
'parent_id' => 0,
'url' => 'About',
'children' => [
0 => [
'id' => 102,
'parent_id' => 101,
'url' => 'About 1'
],
1 => [
'id' => 102,
'parent_id' => 101,
'url' => 'About 2'
],
2 => [
'id' => 102,
'parent_id' => 101,
'url' => 'About 3'
],
]
],
];
?>
<?php if (count($items) > 0) { ?>
<ul>
<?php foreach ($items as $item) { ?>
<li><?php echo $item['url'];?>
<?php if(count($item['children']) > 0) { ?>
<ul class="nested">
<?php foreach ($item['children'] as $subitem) { ?>
<li><?php echo $subitem['url'];?></li>
<?php } ?>
</ul>
<?php } ?>
</li>
<?php } ?>
</ul>
<?php } ?>
结果:
<ul>
<li>Home</li>
<li>About
<ul class="nested">
<li>About 1</li>
<li>About 2</li>
<li>About 3</li>
</ul>
</li>
</ul>
但我追求的是:
<ul>
<li>Home</li>
<li>About
<ul class="nested">
<li>About 1</li>
</ul>
<ul class="nested">
<li>About 2</li>
</ul>
<ul class="nested">
<li>About 3</li>
</ul>
</li>
</ul>
有什么想法吗?
或 数组结构应该如何实现我想要的HTML列表?
答案 0 :(得分:2)
如何用这样的东西添加一些递归?无论尺寸有多深(3D,4D等),它都会照顾您的清单。
function create_list($items) {
if (count($items)==0) return null; // if your child item is empty
if (!array_key_exists('children', $items) || count($items['children'])==0) {
echo '<li>'.$items['url'].'</li>';
return null;
}
// just to be sure we have the index 'url'
if (array_key_exists('url', $items)) {
echo '<li>'.$items['url'].'</li>';
}
foreach($items['children'] as $child) {
echo "<ul class='nested'>";
create_list($child);
echo "</ul>";
}
}
echo "<ul>";
foreach($items as $item) {
create_list($item);
}
echo "</ul>";