从PHP中的树数组生成父子导航

时间:2011-11-22 16:00:26

标签: php arrays navigation html-lists

以下函数排列数组完全错误。您是否注意到以下功能中的任何错误代码?

function buildHtmlList($array)
{
    $maxlevel = 0;

    foreach ($array as $key => $value)
    {
        $previousparent = isset($array[$key - 1]['parent']) ? $array[$key - 1]['parent'] : null;
        $nextparent = isset($array[$key + 1]['parent']) ? $array[$key + 1]['parent'] : null;

        if ($value['parent'] != $previousparent)
        {
            echo "\n<ul>";
            ++$maxlevel;
        }

        echo "\n<li>" . $value['name'];

        if ($nextparent == $value['parent'])
            echo "</li>";
    }

    for ($i = 0; $i < $maxlevel; ++$i)
    {
        echo "\n</li>\n</ul>";
    }
}

2 个答案:

答案 0 :(得分:0)

  

它排列的数组完全错误。您是否注意到以下功能中的任何错误代码?

错误的部分是函数的整个逻辑。您将数组视为一个平面列表(就像它一样!),但是,您希望显示一个树。

由于平面列表不能显示为树,因此您需要先将平面列表更改为树,然后编写显示树的功能。

如何将平面数组转换为树/多维数组的示例in a previous answer

答案 1 :(得分:0)

尝试这样的事情(其中$array的格式与您的示例类似):

$corrected_array = array();
// This loop groups all of your entries by their parent
foreach( $array as $row)
{
    $corrected_array[ $row['parent'] ][] = $row['name'];
}

// This loop outputs the children of each parent
foreach( $corrected_array as $parent => $children)
{
    echo '<ul>';
    foreach( $children as $child)
    {
        echo '<li>' . $child . '</li>';
    }
    echo '</ul>';
}

Demo