Генерация родительско-дочерней навигации из массива дерева в PHP - PullRequest
0 голосов
/ 22 ноября 2011

Следующая функция упорядочивает массив совершенно неправильно. Вы заметили какой-то неправильный фрагмент кода в следующей функции?

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 голосов
/ 22 ноября 2011

Попробуйте что-то вроде этого (где $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>';
}

Демо

0 голосов
/ 22 ноября 2011

Он размещает массив совершенно неправильно. Вы заметили какой-то неправильный фрагмент кода в следующей функции?

Неправильная часть - вся логика функции. Вы рассматриваете массив как плоский список (как он есть!), Однако вы хотите отобразить дерево.

Поскольку плоский список не может быть отображен в виде дерева, необходимо сначала изменить плоский список на дерево, а затем написать функцию, отображающую дерево.

Пример того, как преобразовать плоский массив в дерево / многомерный, доступен в предыдущем ответе .

...