如何在PHP中进行这种类型的增量?

时间:2010-06-19 17:46:06

标签: php mysql

我正在使用此类别脚本:

<?php

include("connect.php");

$nav_query = mysql_query("SELECT * FROM `categories` ORDER BY `id`");
$tree = "";
$depth = 1;
$top_level_on = 1;
$exclude = array();
array_push($exclude, 0);

while ($nav_row = mysql_fetch_array($nav_query)) {
    $goOn = 1;
    for ($x = 0; $x < count($exclude); $x++) {
        if ($exclude[$x] == $nav_row['id']) {
            $goOn = 0;
            break;
        }
    }
    if ($goOn == 1) {
        $tree .= $nav_row['name'] . "<br>";
        array_push($exclude, $nav_row['id']);
        if ($nav_row['id'] < 6) {
                    $top_level_on = $nav_row['id'];
                }

        $tree .= build_child($nav_row['id']);
    }
}

function build_child($oldID) {
    global $exclude, $depth;
    $child_query = mysql_query("SELECT * FROM `categories` WHERE parent_id=" . $oldID);
    while ($child = mysql_fetch_array($child_query)) {
        if ($child['id'] != $child['parent_id']) {
            for ($c=0; $c < $depth; $c++) {
                            $tempTree .= "&nbsp;";
                        }
            $tempTree .= "- " . $child['name'] . "<br>";
            $depth++;
            $tempTree .= build_child($child['id']);
            $depth--;
            array_push($exclude, $child['id']);
        }
    }

    return $tempTree;
}

echo $tree;

?>

它依赖于以下mysql数据库结构:

id | parent_id | name

1                Cats
2    1           Siamese Cats
3    2           Lilac Point Siamese Cats
4                Dogs

etc...

该脚本允许无限制的类别深度,但有一个主要的垮台。它显示前端的类别导航,如下所示:

Cats
 - Siamese Cats
 - Lilac Point Siamese Cats
Dogs

我怎么能让它显示如下:

Cats
 - Siamese Cats
   - Lilac Point Siamese Cats
Dogs

那么对于每个额外的类别深度,另一个空格是否会被添加到类别文本的开头缩进中?

1 个答案:

答案 0 :(得分:0)

由于您已经记录了深度,因此请使用它。 E.g。

$indent = '';
for($i = 0; $i < $depth; $i++) {
     $indent .= "&nbsp;";
}
$tempTree .= $indent . "- " . $child['name'] . "<br>";

要使其显示您想要的方式,您可能需要使用$depth初始化0


另请注意,在嵌套for循环中执行SQL查询不是最佳方法。如果可能,请尝试减少查询次数。

例如,您可以使用类,并立即获取所有条目,然后使用对象和数组构建树结构。