经典ASP:从数组构建树的递归函数

时间:2014-12-04 13:48:42

标签: arrays asp-classic tree

我用.GetRows()从数据库中提取了所有记录,所以我现在有了一个大数组

arrTree = rsTree.GetRows()

为了确保它有效,我可以用这个打印:

dim x
response.write "<table>"
For x = 0 to ubound(arrTree, 2)
   response.write "<tr>"
   response.write("<td>" + trim(x+1))
   response.write("<td>" + trim(arrTree(0,x))) 'ID
   response.write("<td>" + trim(arrTree(1,x))) 'PARENT
   response.write("<td>" + trim(arrTree(2,x))) 'NAME
next
response.write "</table>"

没关系,现在我想要一个递归函数来构建一个HTML树/菜单:这里是我遇到麻烦的地方

我试图将一个正常运行的PHP函数“移植”到ASP,但它不起作用并陷入循环

Function Tree(varAncestor, varArray)
    ' varAncestor is the parent from where to start
    Dim x
    varHasChildren = false
    For x = 0 to ubound(varArray, 2)
        If CInt(varArray(1,x)) = varAncestor Then
            If (varHasChildren = false AND varAncestor <> 0) Then 
                varHasChildren = true
                Response.Write("<ul>")
            End If
        %>
        <li><% Response.Write(varArray(2,x)) %>
        <% Call Tree(varArray(1,x), varArray) %>
        </li>
        <%
        End If
    Next
    If (varHasChildren = true AND varAncestor <> 0) Then 
        Response.Write("</ul>")
    End If
End Function

Response.Write("<ul>")
Call Tree(0, arrTree)
Response.Write("</ul>")

这有什么问题,但我无法理解......请你帮忙吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

好的,终于做到了!这是基本版

Function Tree(varAncestor, varArray)
    varHasChildren = false
    For x = 0 to ubound(varArray, 2)
        If (CInt(varArray(1, x)) = varAncestor) Then
            If (varHasChildren = false AND varAncestor > 0) Then 
                varHasChildren = true
                Response.Write("<ul>")
            End If
        %>
        <li><% Response.Write(varArray(2, x)) %>
            <% Call Tree(varArray(0, x), varArray) %>
        </li>
        <%
        End If
    Next
    If (varHasChildren = true AND varAncestor > 0) Then 
        Response.Write("</ul>")
    End If
End Function

这是我使用的改进版本:

Function Tree(varAncestor, varArray)
    varHasChildren = false
    For x = 0 to ubound(varArray, 2)
        If (CInt(varArray(1, x)) = varAncestor) Then
            If (varHasChildren = false AND varAncestor > 0) Then 
                varHasChildren = true
                Response.Write("<ul>")
            End If
        %>
        <li class="<% If (Request.QueryString("iCat") = CStr(varArray(0, x))) Then Response.Write("active") %>">
            <a href="cat.asp?iCat=<% Response.Write(varArray(0, x)) %>">
                <span class="fa fa-fw fa-folder-o text-warning"></span> 
                <% Response.Write(varArray(2, x)) %>
            </a>
            <% Call Tree(varArray(0, x), varArray) %>
        </li>
        <%
        End If
    Next
    If (varHasChildren = true AND varAncestor > 0) Then 
        Response.Write("</ul>")
    End If
End Function
相关问题