请考虑以下表结构:
+----+-----------+--------+
| id | page_name | parent |
+----+-----------+--------+
| 1 | Page 1 | 0 |
+----+-----------+--------+
| 2 | Page 2 | 1 |
+----+-----------+--------+
| 3 | Page 3 | 2 |
+----+-----------+--------+
| 4 | Page 4 | 1 |
+----+-----------+--------+
我希望遍历每一页,当我们沿着树向下时缩进它们。问题是对育儿级别没有限制(即任何页面都可以有孩子)。我想将它们输出到一个<select>
元素中,如下所示:
Page 1
Page 2
Page 3
Page 4
我在 Page 类中有两个函数,一个是HasChildren()
,另一个是FetchChildren()
。这是我的想法,但它只输出第一级子页面:
while($record = $result->fetch_object())
{
$page = new self($record->id);
$selected = ($page->id == $selectedVal) ? ' selected="selected"' : '';
$select.= '<option value="'. $page->id .'"'. $selected .'>'. $page->name .'</option>';
$i = 1;
$child = $page;
while($child->HasChildren($active))
{
$indentString= ' - ';
for($j = 1; $j <= $i; $j++) { $indentString = ' '.$indentString; }
foreach($child->FetchChildren($active) as $child_child)
{
$selected = ($child_child->id == $selectedVal) ? ' selected="selected"' : '';
$select.= '<option value="'. $child_child->id .'"'. $selected .'>'. $indentString.$child_child->name .'</option>';
$child = $child_child;
}
$i++;
}
}
谁能指出我正确的方向?这是漫长的一天,所以我可能遗漏了一些非常明显的东西。