Coldfusion 创建结构数组很麻烦

Coldfusion 创建结构数组很麻烦,coldfusion,coldfusion-11,Coldfusion,Coldfusion 11,我正在尝试在Application.cfm文件中创建一个结构数组,然后可以在以后的页面中附加到该数组中。我正在跟踪调查。我是这样使用它的: <cfset session.box_status = arrayNew(1) /> <cfset session.box_status[1] = structNew() /> <cfset session.box_status[1].partner_id = '0' /> <cfset session.box_st

我正在尝试在Application.cfm文件中创建一个结构数组,然后可以在以后的页面中附加到该数组中。我正在跟踪调查。我是这样使用它的:

<cfset session.box_status = arrayNew(1) />
<cfset session.box_status[1] = structNew() />
<cfset session.box_status[1].partner_id = '0' />
<cfset session.box_status[1].partner_username = '' />
<cfset session.box_status[1].status = '0' />

arrayAppend()
中的第一个参数需要是要向其追加内容的数组,在您的示例中,您使用的是
i
——它是循环的计数器——它是一个数字,而不是数组。

此外,您需要澄清您实际想要实现的目标。该问题询问附加一个新项,但代码的某些部分似乎试图覆盖位置
session.box\u status[1]
中的现有结构值

如果您真的想将一个新结构附加到数组中,就没有理由循环。只需创建一个空结构:

<cfset newItem = structNew() /> 
更新:

也就是说,您使用的教程显然是为旧版本的CF编写的。正如@cfqueryparam指出的,更高版本支持创建数组和结构的速记。您不必使用
structNew()
,只需执行以下操作:

 <cfset newItem = { partner_id = FORM.partner_id, ... etectera }>

请注意,一个常见错误是传递数组名称,但忘记放置磅符号。对我来说,当我说错话的时候


而不是正确的表达



发出数组时,调试消息java.lang.string不能使用。

检查文档中的
ArrayAppend()
,您用错了。得到答案了吗?他们的答案似乎与我刚才所说的完全相同。因此,我尝试使用
session.box\u status[I].status
而不是
I
,但没有用。因为您仍然没有传递数组
session.box_status[i]。status
不是数组。请注意:根据cf的版本,您甚至可以使用隐式(简写)结构/数组创建(其中“[]”创建空数组,{}创建空结构),如cf8及以上版本中的
,以及cf10及以上版本中的
。在此之前,创建更大的结构或数组是一项单调的任务。这是针对询问者的,而不是@Leigh,他无疑知道这一点。@cfqueryparam-捕捉得好。根据它们的原始语法,我只是假设它们使用的是不支持“{}”和“[]”的旧版本。然而,我现在看到他们的版本是CF11。我将更新我的答案以使用“更好”的语法;-)
<cfset newItem = structNew() /> 
<cfset newItem.partner_id = FORM.partner_id>
... etcetera
<cfset ArrayAppend(session.box_status, newItem)>
 <cfset newItem = { partner_id = FORM.partner_id, ... etectera }>
<cfloop array="myAry" index="aryElement">
<cfloop array="#myAry#" index="aryElement">