我还是PHP编程的新手。我有一个配置文件存储侧面菜单地图数组,如下例所示。
<?php
$array =
[
'Home' => '\index.php',
'Product' =>
[
'Top' => '\product.php?category=top',
'Dress' => '\product.php?category=dress',
'More Deeper Example' =>
[
'Example 1' => '\example1.php'
'Example 2' => '\example2.php'
]
],
];
?>
可以将上面的数组转换为下面的HTML代码吗?注意:我必须支持无限级别。
<ul>
<li><a href="\index.php">Home</a></li>
<li>
Product
<ul>
<li><a href="\product.php?category=top">Top</a></li>
<li><a href="\product.php?category=dress">Dress</a></li>
<li>
More Deeper Example
<ul>
<li><a href="\example1.php">Example 1</a></li>
<li><a href="\example2.php">Example 2</a></li>
</ul>
</li>
</ul>
</li>
</ul>
答案 0 :(得分:1)
这样的事情可以解决问题:
$array =
[
'Home' => '\index.php',
'Product' =>
[
'Top' => '\product.php?category=top',
'Dress' => '\product.php?category=dress',
'More Deeper Example' =>
[
'Example 1' => '\example1.php', // note: you missed a comma
'Example 2' => '\example2.php',
],
],
];
function recursiveMenuCreate($menuArray)
{
$output = "<ul>";
foreach ($menuArray as $key => $menuItem) {
if (is_array($menuItem) === true) {
$output .= "<li>{$key}";
$output .= recursiveMenuCreate($menuItem);
$output .= "</li>";
} else {
$output .= "<li><a href='{$menuItem}'>{$key}</a></li>";
}
}
return $output . "</ul>";
}
该功能可以继续无限(只要服务器可以/被允许处理)
正如您所见,函数本身在函数体内被调用。这就是使函数递归的原因。
编辑我把它放在评论中,但答案本身可能更清楚了 递归函数只不过是一个调用自身的函数。在这种情况下,它意味着该函数将从完整数组开始,并以第一项的循环开始。
这是Home
,它不是数组,因此变量$output
获取一个简单的列表项。第二项是一个数组,因此对函数recursiveMenuCreate
进行了新的调用。
由于这是一个新的调用,它对$output
具有不同的值(目前没有)。它将填充输入数组的数组项(在本例中为$ array ['Product'])并将其返回到原始调用。
然后原始呼叫将继续并返回最终输出
答案 1 :(得分:0)
是。它是可能的,并且可以轻松实现。但这取决于您的数据库架构。这取决于您如何组织和映射数据库表中的类别。每当您在页面上呈现类别时,都需要检查其子类别。如果它有子类别,那么应该创建一个新的列表元素并显示该类别的所有子类别。这将是递归的。有可能但在不知道您的数据库的情况下无法提供确切的代码。去尝试一下吧。一切顺利