我想将我的数组显示为菜单。当数组在一个维度时很容易 - 我可以很容易地使用for循环来生成一个。但现在我的菜单数组看起来像这样:
$menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6"); // hope it's defined coreectly
因此,如果主数组$菜单中有一个元素,如item1或item5,我想将其显示为一个简单的
<li>item3
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</li>
我想我需要在for循环中使用for循环,但可能有一种更简单的方法。
问候,并提前感谢 马特
答案 0 :(得分:2)
你可以使用递归,这会带来额外的好处,能够遍历无限级别的子菜单:
function renderList($array) {
echo "<ul>";
foreach ($array as $key => $item)) {
echo "<li>";
if (is_array($item) {
echo $key;
renderList($item);
} else {
echo $item;
}
echo "</li>";
}
echo "</ul>";
}
$menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6");
renderList($menu);
答案 1 :(得分:1)
你应该使用嵌套函数。
CODE UPDATED
这是一个小提琴:http://phpfiddle.org/main/code/tac-3jh
<?php
$menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6");
function arr2ul($arr){
$ret='';
if (is_array($arr)){
$ret='<ul>';
foreach($arr as $key=>$val){
if(is_array($val)){
$ret.='<li>'.$key;
$ret.=arr2ul($val);
$ret.='</li>';
}else{
$ret.='<li>'.$val.'</li>';
}
}
$ret.='</ul>';
}
return $ret;
}
$result=arr2ul($menu);// contains the html output and you
// can echo it where you want
echo $result;
?>
输出:(像这样)
<ul>
<li>item1</li>
<li>item2
<ul>
<li>sub item<li>
</ul>
</li>
</ul>
答案 2 :(得分:1)
试试这个
<?php
$menu = array("item1", "item2", "item3" => array("subitem1", "subitem2", "subitem3"), "item4", "item5", "item6"); // hope it's defined coreectly
setfunction($menu);
function setfunction($menu){
echo "<ul>";
foreach ($menu as $key => $item) {
echo "<li>";
if(is_array($item))
{
echo $key;
setfunction($item);
}
else
{
echo $item;
}
echo "</li>";
}
echo "</ul>";
}
?>
输出
item1
item2
item3
subitem1
subitem2
subitem3
item4
item5
item6