如何使用分层数据结构打印列表? [英] How to print list using hierarchical data structure?
本文介绍了如何使用分层数据结构打印列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我运行此代码时:
foreach ($tree as $node) {
echo str_repeat(' ', $node->tree_depth * 4) . $node->id . PHP_EOL;
}
我得到格式正确的文本,例如:
I get well formatted text like:
Food
Fruit
Red
Cherry
Strawberry
Cool
Not cool
Yellow
Banana
Meat
Beef
Pork
但是我想用<ul><li>...
创建一个列表:
But I want to create a list with <ul><li>...
:
我尝试过:
echo '<ul>';
$prev_depth = 0;
foreach($table->fetchTree() as $row) {
if ($row->tree_depth > $prev_depth) {
echo '<li><ul>';
} else if ($row->tree_depth < $prev_depth) {
echo '</li></ul>';
}
echo '<li>' . $row->name . '</li>';
$prev_depth = $row->tree_depth;
}
echo '</ul>';
但是我还有一些额外的ul标签,依此类推.我在此上损失了2天,因此如果您可以帮助我,请在此处发布...
But I have some extra ul tags and so on. I lost 2 days on this so if you can help me please post here...
推荐答案
尝试以下算法:
$tree = array(
array('Food', 0),
array('Fruit', 1),
array('Red', 2),
array('Cherry', 3),
array('Strawberry', 3),
array('Cool', 4),
array('Not cool', 4),
array('Yellow', 2),
array('Banana', 3),
array('Meat', 0),
array('Beef', 1),
array('Pork', 1),
);
$depth = -1;
$flag = false;
foreach ($tree as $row) {
while ($row[1] > $depth) {
echo "<ul>\n", "<li>";
$flag = false;
$depth++;
}
while ($row[1] < $depth) {
echo "</li>\n", "</ul>\n";
$depth--;
}
if ($flag) {
echo "</li>\n", "<li>";
$flag = false;
}
echo $row[0];
$flag = true;
}
while ($depth-- > -1) {
echo "</li>\n", "</ul>\n";
}
在这里,您只需将$tree
替换为$table->fetchTree()
,将$row[0]
替换为$row->name
,将$row[1]
替换为$row->tree_depth
.
Here you just need to replace $tree
by $table->fetchTree()
, $row[0]
by $row->name
and $row[1]
by $row->tree_depth
.
这篇关于如何使用分层数据结构打印列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文