从数组中删除一个维度

Remove a dimension from an array

我正在使用数组从 table 中获取列名,并且我正在使用 Getrows 从 MYSQL 记录集中填充它。像这样:

arrFOO= fooRS.GetRows()

现在,这确实完成了将列加载到数组中的工作。但是,GetRows 是一个多维数组,包含有关列的数据(数据类型、最大长度等)。
我的目标是将数组弹出到 SELECT/OPTION 表单中,并允许用户从表单中 select 列。问题是作为一个多维数组,我根本不需要数组中的其他数据。最初,很好奇是否有可能删除数组的整个维度,也许可以使用 redim preserve,但到目前为止还没有运气。有没有一种方法可以获取行并且只获取一个维度,或者有没有一种方法可以 trim 将多维数组缩小到只有一个维度?即 - array(0,0) 变为 array(0) 并且我想保留第二个插槽,并删除我相信的第一个插槽,如果这有助于更好地解释它的话。这是 option/select 示例:

                    <% for each x in arrfoo
                        formloopcount = formloopcount + 1
                    %>
                        <option id="optionid" value="<%=x%>" ><%=x%></option>
                    <%  next %>

我所拥有的正在工作,但没有按预期工作,因为数组是多维的,选项包括数据类型,以及我不需要也不希望在此过程中显示的其他数据。下拉菜单显示的结果如下:

列名
智力

列名
变量(#)

因此,虽然表单在概念上有效,但如果他们 select 它通过并正常工作的列,但显然我不希望用户 select 其他项目或 space 在它们之间,只有列名,仅此而已。感谢您抽出时间,如果您需要更多示例或想要详细说明,请询问。最后,我知道我需要做多少验证才能允许这样的表单存在,但最终用户希望能够即时更改内容,而且它都是内部网络,所以安全并且访问权限非常有限,只有 CTO 甚至可以访问此更新端,目前,这只是一个简单的 select,执行此操作的用户应该有权访问它无论如何,长话短说,我不需要关于验证或 SQL 注入的讲座,只需要有关数组的一些帮助,但会接受任何建议或替代方法,再次感谢!

GetRows() method of ADODB.Recordset object return 是一个包含数据的二维数组(没有数据类型等,它只是列和行中的原始数据)。由于它的数据是按顺序排列的,因此它适合使用 For 语句通过索引枚举数据,而不是使用 For Each 语句,后者的行为不会像您预期的那样。

建议使用IsArray()检查数组是否有效,然后使用UBound()确定数组包含多少行数据。

这是使用 GetRows() 的快速示例,该示例将枚举每一列和每一行以及 return 值。

'Assuming your ADODB.Recordset is fooRS
Dim data: data = fooRS.GetRows()
Dim row, col, rows, cols
If IsArray(data) Then
  rows = UBound(data, 2)
  For row = 0 To rows
    cols = UBound(data, 1)
    For col = 0 to cols
      Call Response.Write(data(col, row))
    Next
  Next
End If

这使您可以进行大量控制,例如,您可以 return 只为所有行的第一列中的值(将数组中的第一个元素调整为 return 其他列相反)。

If IsArray(data) Then
  rows = UBound(data, 2)
  For row = 0 To rows
    Call Response.Write(data(0, row))
  Next
End If

有用的链接

  • Using Stored Procedure in Classical ASP .. execute and get results (使用GetRows()的例子)