我有以下php数组
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
)
[2] => Array
(
[0] => 4
)
[4] => Array
(
[0] => 5
)
)
其中第一个键(0,1,2,4)是包含子项的ID。
一切都从键0开始,键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 :(得分: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);