У меня есть следующий 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
спасибо
Возможно, что-то вроде этого фрагмента должно работать:
$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);