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


Parent-child navigation generation from tree array in PHP

下面的函数将数组排列完全错误。你是否注意到以下函数中有任何错误的代码?

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>";
    }
}

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

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

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

在前面的回答中有一个如何将平面数组转换为树/多维数组的示例。

尝试这样做(其中$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>';
}
演示