PHP Build Tree с тегом ul

0

У меня есть следующий php-массив

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
        )

    [1] => Array
        (
            [0] => 3
        )

    [2] => Array
        (
            [0] => 4
        )

    [4] => Array
        (
            [0] => 5
        )

)

В которых первые ключи (0, 1, 2, 4) являются идентификаторами, содержащими дочерние элементы.

Все начинается с ключа 0, который является родительским для всех остальных.

Я хочу построить дерево, используя теги ul li из этого массива. Я искал сайт, я нашел похожие темы, но затем я заметил, что мой метод не то же самое.

Я попытался сделать это и потерпел неудачу.

РЕДАКТИРОВАТЬ

Это то, что у меня есть до сих пор:

function PrintTree( $arr )
{
    global $names;

    echo "<ul>";
    foreach ( $arr as $key => $childrens )
    {
        if ( $key == 0 and is_array( $childrens ) )
        {
            PrintTree( $childrens );
            continue;
        }

        if ( is_array( $childrens ) )
        {
            echo "<li><a href=\"#\">" . $names[$key] . "</a>";
            PrintTree( $childrens );
            echo "</li>";
        }
        else
        {
            echo "<li><a href=\"#\">" . $names[$childrens] . "</a></li>";
        }
    }
    echo "</ul>";
}

Вышеприведенный код не работает и создает следующее:

Root 
      Item 1
      Item 2
   Item 1
      Item 3
   Item 2
      Item 4
   Item 4
      Item 5

Но правильное дерево должно быть:

Root 
     Item 1
         Item 3
     Item 2
         Item 4
             Item 5

спасибо

  • 0
    Какой метод вы используете? Код пожалуйста.
  • 0
    Что у тебя до сих пор?
Показать ещё 6 комментариев
Теги:

1 ответ

2
Лучший ответ

Возможно, что-то вроде этого фрагмента должно работать:

$foo = [
    0 => [1,2],
    1 => [3],
    2 => [4],
    4 => [5],
];

function track($array, $index = 0) {
    $out = '<ul>';
    if (isset($array[$index]) && is_array($array[$index])) {
        foreach($array[$index] as $track) {
            $out .= '<li>'.$track;
            $out .= track($array, $track);
            $out .= '</li>';
        }
    }
    $out .= '</ul>';
    return $out;
}

echo track($foo);
  • 0
    ДА! Работает. Спасибо, босс

Ещё вопросы

Сообщество Overcoder
Наверх
Меню