生成包含完整路径(url)和数据库值的嵌套树


Generating nested tree with full paths (URLS) and values from the database

我从昨天开始就在研究这个问题。更具体地说,我在数据库中有一些值,如下所示:

<>之前____________________________________| id | parentId | name | url |------------------------------------| 1 | 0 | Nieuws | url_1 |------------------------------------| 2 | 0 |评论| url_2 |------------------------------------| 3 | 0 | Meuk | url_3 |------------------------------------| 4 | 1 |游戏| url_4 |------------------------------------| 5 | 1 |互联网| url_5 |------------------------------------| 6 | 5 |浏览器| url_6 |------------------------------------之前

我希望看到基于这些值生成的树。目标形状看起来应该像这样:

<ul>
    <li><a href="url_1">Nieuws</a>
        <ul>
            <li><a href="url_1/url_4">Games</a></li>
            <li><a href="url_1/url_5">Internet</a>
                <ul>
                    <li><a href="url_1/url_5/url_6">Browsers</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li><a href="url_2">Reviews</a></li>
    <li><a href="url_3">Meuk</a></li>
</ul>

对我来说,将所有的斜杠都放在树中(包含所有父节点的完整路径&孩子).

我想补充一下,我在这个页面上找到了代码:http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html但我不能像上面描述的那样重做它。我将非常感谢任何帮助,因为申请截止日期很快就要到了

只有一个修改。我认为这种方法简单得多。我没有使用数组来存储URL,而是传递一个字符串作为参数(包含基本URL)。

// menu builder function, parentId 0 is the root 
function buildMenu($parentId, $menuData, $urlRoot) 
{ 
    $html = ''; 
    if (isset($menuData['parents'][$parentId])) 
    {
    $html = '<ul>'; 
    foreach ($menuData['parents'][$parentId] as $itemId) 
    { 
        $url   = $urlRoot . $itemId['url'] . '/';
        $html .= '<li><a href="$url">' . $menuData['items'][$itemId]['name'] . '</a>'; 
        // find childitems recursively 
        $html .= buildMenu($itemId, $menuData, $url); 
        $html .= '</li>'; 
    } 
    $html .= '</ul>'; 
    } 
    return $html; 
} 
// output the menu 
echo buildMenu(0, $menuData, '');

基于链接中的函数,如果您将url添加到查询中,则应该这样做:

<?php
// menu builder function, parentId 0 is the root
function buildMenu($parentId, $menuData, $nodes=false)
{
    $html = '';
    if (isset($menuData['parents'][$parentId]))
    {
        $html = '<ul>';
        if($nodes === false){
            $nodes = array();
        } elseif(!is_array($nodes)) {
            $nodes = array($nodes);
        } else {
            $nodes[] = $menuData['items'][$parentId]['url'];
        }
        foreach ($menuData['parents'][$parentId] as $itemId)
        {
            $html .= '<li><a href="/' . implode('/', $nodes) . '">';
            $html .= $menuData['items'][$itemId]['name'] . '</a>';
            // find childitems recursively
            $html .= buildMenu($itemId, $menuData, $nodes);
            $html .= '</li>';
        }
        $html .= '</ul>';
        array_pop($nodes);
    }
    return $html;
}
// output the menu
echo buildMenu(0, $menuData);
?>