我尝试使用codeigniter创建多级菜单 这些是我用来回显菜单的两个功能。
function loop_array($array = array(), $parent_id = 0) {
if (!empty($array[$parent_id])) {
// echo '<ul>';
foreach ($array[$parent_id] as $items) {
echo '<li><a class = "parent"><span>';
echo $items['label'];
echo '</span></a>';
loop_array($array, $items['id']);
echo '</li>';
}
echo '</ul>';
}
}
function display_menus($menu_items) {
// var_dump($menu_items);
$array = array();
foreach ($menu_items as $rows) {
$array[$rows['parent']][] = $rows;
}
loop_array($array);
}
然后输出html代码就像
<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'>
<div id="menu">
<ul class="menu">
<li><a class = "parent"><span>Home</span></a></li><li><a class = "parent"><span>Code</span></a><li><a class = "parent"><span>PHP</span></a><li><a class = "parent"><span>Scripts</span></a><li><a class = "parent"><span>Archive</span></a><li><a class = "parent"><span>Snippet</span></a></li></ul></li></ul></li><li><a class = "parent"><span>Help</span></a></li></ul></li><li><a class = "parent"><span>CSS</span></a></li></ul></li><li><a class = "parent"><span>Contact</span></a></li></ul> </ul>
</div>
</div>
但我需要将其作为
<div id='Mymenu' style=' color: #000; width: 960px; background-image:url(); clear: both; text-align: center; height: 46px;'>
<div id="menu">
<ul class="menu">
<li><a href="index" class="parent"><span>HOME</span></a>
<div><ul>
<li><a href=""><span>Vertical Menu</span></a>
<li><a href=""><span>Slide show</span></a>
</li>
<li><a href="#" class="parent"><span>ABOUT US</span></a></li>
<li><a href="news"><span>NEWS</span></a></li>
<li class="last"><a href="#"><span>ACADEMICS</span></a></li>
<li class="last"><a href="#"><span>PROGRAMME</span></a></li>
<li class="last"><a href="#"><span>ADMISSIONS</span></a></li>
<li class="last"><a href="courses"><span>COURSES</span></a></li>
<li class="last"><a href="contact_us"><span>CONTACT US</span></a></li>
<li class="last"><a href="feedback"><span>Feedback</span></a></li>
</ul>
</div>
任何人都可以给我一个方法吗?
答案 0 :(得分:1)
请注意你的目标代码是错误的html开头(不是关闭的html标签),我不确定它是否真的是你需要或想要的,即它真的是最终的正确形式吗?
此外,如果您清楚地制定问题并以可读格式(而不是一行)编写代码,其他人则没有浪费时间来了解您想要的内容。
我假设您有一个树状/多级菜单,您希望打印出来区分内部节点(即带有子节点或“父节点”的节点)和终端节点(即您的“最后”元素)。
您的* display_menus *功能按其父菜单ID对菜单项进行分组,看起来是正确的。
你的* loop_array *函数几乎就在那里:
function loop_array($array = array(), $parent_id = 0)
{
if (!empty($array[$parent_id]))
{
echo "\n<ul>";
foreach ($array[$parent_id] as $items)
{
// is it a terminal node?
if (empty($array[$items['id']]))
{
$class = 'last';
}
else
{
$class = 'parent';
}
// is there a link?
if (empty($items['my-link-field']))
{
$link = '#';
}
else
{
$link = $items['my-link-field'];
}
// if you do not divide your output string into several statements,
// the code becomes more readable
// I mean
// it
// feels
// like
// several
// fragments
// that
// must
// be seen, understood and put into context. Which -in any language- is just easier with a nice flow.
echo "<li><a class='{$class}' href='{$link}'><span>{$items['label']}</span></a>";
loop_array($array, $items['id']);
echo "</li>\n";
}
echo "</ul>\n";
}
}
如果您仍未获得所需的结果,我会假设您的数据($ menu_items)设置不正确。你似乎已经检查过(注释了var_dump),你可能想检查传递给loop_array的数据,即$ array。