1

PHP 提供了关联数组,但在经典的 asp 中没有这样的东西。我正在寻找一个允许我创建和遍历与此类似的层次结构的类或函数:

United States
  Washington
    Electric City
      Banks Lake 
    Lake Chelan
      Wapato Point 
    Gig Harbour
Mexico
  Nayarit
    Aticama
Asia
  India
    Mumbai
  Pakistan
    Sindh
      Karachi

正如您所注意到的,层次结构的深度不均匀——它可能是 3、4 或 5 级深度。数据库结构更加复杂,对于某些记录,我必须从区域级别开始显示数据,而对于其他记录,我应该从国家/地区开始。数组数组确实会有所帮助,但在 ASP 中我的双手被束缚了。

4

5 回答 5

4

很容易建议您在服务器端使用 JScript 而不是 VBScript。它不仅更自然地做这类事情,而且您可能熟悉该语言。缺点是 Web 上与 ASP 相关的绝大多数“How-To”都是用 VBScript 编写的。

VBScript 中的关联数组称为库Dictionary中可用的Scripting。但是,要创建层次结构,您可能需要更多帮助。我会围绕着创建一个类,Dictionary这样我就可以拥有更多的Name属性,并使分层操作更容易。

这是一个示例类:-

Class Node
   Private myName
   Private myChildren

   Private Sub Class_Initialize()
     Set myChildren =  CreateObject("Scripting.Dictionary")
   End Sub

   Public Property Get Name()
      Name = myName
   End Property

   Public Property Let Name(value)
      myName = Value
   End Property

   Public Function AddChild(value)

     If Not IsObject(value) Then
       Set AddChild = new Node
       AddChild.Name = value
     Else
       Set AddChild = value
     End If

     myChildren.Add AddChild.Name, AddChild

   End Function


   Public Default Property Get Child(name)
     Set Child = ObjectOrNothing(myChildren.Item(name))
   End Property

   Public Property Get Children()
     Set Children = myChildren
   End Property

   Private Function ObjectOrNothing(value)
     If IsObject(value) Then
       Set ObjectOrNothing = value
     Else
       Set ObjectOrNothing = Nothing
     End If
   End Function

End Class

现在你可以创建你的树了:-

 Dim root : Set root = new Node
 With root.AddChild("United States")
   With .AddChild("Washington")
     With .AddChild("Electric City")
       .AddChild "Banks Lake"
     End With
     With .AddChild("Lake Chelan")
       .AddChild "Wapato Point"
     End With
     .AddChild "Gig Harbour" 
   End With
 End With

现在访问此层次结构:-

Sub WriteChildrenToResponse(node)
  For Each key In node.Children

    Response.Write "<div class=""node"">" & vbCrLf
    Response.Write "<div>" & root.Child(key).Name "</div>" & vbCrlF
    Response.Write "<div class=""children"">" & vbCrLf

    WriteChildrenToResponse root.Child(key)

    Response.Write "</div></div>"
  Next
End Sub

''# Dump content of root heirarchy to the response
WriteChildrenToResponse root
于 2009-10-02T10:22:15.623 回答
1

您可以将层次结构放在XMLDOM对象中并以这种方式遍历它。

于 2009-10-02T08:18:17.813 回答
0

使用 Server.CreateObject("Scripting.Dictionary")

http://msdn.microsoft.com/en-us/library/x4k5wbx4(VS.85).aspx

于 2009-10-02T06:24:23.430 回答
0

您可能想看看 sql 端的物化路径模型。这确实简化了使用相对“静态”树的工作。

于 2009-10-02T08:05:45.940 回答
0

我会创建一个类来包含这些,如下所示:

Class Area
  Public Name
  Private _children

  Private Sub Class_Initialize()
    _children = Array()
  End Sub

  Public Property Get Children()
    Set Children = _children
  End Property

  Public Sub AddChild(newChild)
    ReDim Preserve _children(UBound(_children)+1)
    Set _children(UBound(_children)) = newChild
  End Sub
End Class
于 2009-10-02T10:30:42.233 回答