在PHP中由父项循环数据库行

时间:2012-08-30 21:43:06

标签: php mysql

请考虑以下表格结构:

+----+-----------+--------+
| 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= '&nbsp;-&nbsp;';
        for($j = 1; $j <= $i; $j++) { $indentString = '&nbsp;'.$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++;
    }
}

有人能指出我正确的方向吗?这是漫长的一天,所以我可能错过了一些非常明显的事情。

0 个答案:

没有答案