65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.55/5 (5投票s)

2006 年 9 月 4 日

3分钟阅读

viewsIcon

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 格式的字符串! 类似地,这些数据可以稍后提取以再次使用。 想想看..

© . All rights reserved.