在 ASP 中模拟 PHP 风格的关联数组






2.55/5 (5投票s)
2006 年 9 月 4 日
3分钟阅读

64547
在 ASP 中模拟 PHP 风格的关联数组
引言
我是一位经验丰富的 ASP 程序员,花费大量时间使用 vbscript 准备和创建类。 最近我转移到 PHP,这是一种很棒的语言。 但有一件事让我思考,为什么人们应该选择 php 而不是 asp。 是的,php 引擎非常出色且高效,但我发现了 php 的关键点,那就是关联数组。 asp 程序员经常使用如下代码片段:
Dim MyList()
Redim MyList (2)
MyList(0)="Sujoy"
MyList(1)="Kumar"
MyList(2)="Roy"
上面的代码非常简单。 我正在存储我名字的三个部分(名、中间名、姓,按此顺序)。 现在在我的代码中,如果我想获取名字,我会写成如下:
fname=MyList(0)
如果我想在列表中添加更多值,那么当我稍后使用它们,例如address=MyList(10)
时,需要记住索引号 0 或 1 或等等,但如果我能以以下方式使用代码呢:
Dim MyList
MyList("fname")="Sujoy"
MyList("address")="3.0 VBScript, Microsft Corp."
是的,这是一个关联数组。 如果您了解 php,您会发现您需要在每 5 行代码中编写此类代码。
但如何在 ASP 中做到这一点呢? 上帝在这里,他给了我们“Scripting.Dictionary”对象和类的概念。 各位,你们可以做到。 让我们看看如何做到。
什么是关联数组?
好吧,即使关联数组的概念与 PHP 没有关联,我也会解释这些内容。
我们 ASP 程序员都知道数组,但在那里我们需要使用“索引”号来访问任何元素。 就像第一个示例代码片段。 但在关联数组中,情况有所不同。 您不仅可以通过“索引”还可以通过“名称”来访问数组的任何元素。 就像您 ASP 猜测 rmember 如此使用的“recordset”对象的代码,例如
Set rs=CreateObject("ADODB.RecordSet")
rs.Open (...,"SELECT name FROM list")
name1=rs.Fields("name").Value
name2=rs.Fields(0).Value
name1 和 name2 都会给出相同的结果。 因此,一个元素可以通过索引 (0) 或名称 ("name") 访问。 当您仅限于使用索引时,请确保您使用的是 ASP 的简单贫乏数组,但是当您可以通过名称和索引访问元素时,您肯定使用的是关联数组。
Request.Form 是一个关联数组,如果您使用 "TypeName" 方法检查其类型,它将显示 "Dictionary" 。 "Scripting.Dictionary" 是我们 ASP 程序员开始使用关联数组的入口点。
我的数组
请关注此页面,您将获得打开您所有想象力之窗的代码。 但为了保持您的注意力,请查看以下代码片段
Class AssocArray
Private dicContainer
Private Sub Class_Initialize()
Set dicContainer=Server.CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate()
Set dicContainer=Nothing
End Sub
Public Default Property Get Item(sName)
If Not dicContainer.Exists(sName) Then
dicContainer.Add sName,New AssocArray
End If
If IsObject(dicContainer.Item(sName)) Then
Set Item=dicContainer.Item(sName)
Else
Item=dicContainer.Item(sName)
End If
End Property
Public Property Let Item(sName,vValue)
If dicContainer.Exists(sName) Then
If IsObject(vValue) Then
Set dicContainer.Item(sName)=vValue
Else
dicContainer.Item(sName)=vValue
End If
Else
dicContainer.Add sName,vValue
End If
End Property
End Class
您现在可以编写
Dim MyList:Set MyList=New AssocArray
MyList("name")("first")="Sujoy"
MyList("name")("last")="Roy"
快乐编码
一些想法
使用这种关联数组的领域是无穷无尽的。 假设,您正在编写一个订单处理页面,并且想要存储事务的完整详细信息,其中可能包含 50 个字段。 然后您必须在数据库表中输入 50 个字段。 但是,如果您将这些数据存储在关联数组中呢? 并编写几行代码,将存储的数据转换为可以存储的 xml 格式的字符串! 类似地,这些数据可以稍后提取以再次使用。 想想看..