2013-08-23 61 views
5

快乐星期五全部,动态变量命名和参考(ColdFusion)

一直试图破解这个几天。我正在寻找的是使用固定字符串和变量(数字)的组合动态创建变量。

我正在查询数据库以获取代理列表,然后我想为每个代理创建各个变量来保存不同的统计数据。我正在寻找循环中的当前统计数据(即创建的票据),然后将每个代理ID添加到最后。

我打电话给这个第一个统计GCGet Created所以一个示例变量与当前的统计和代理ID将是类似于GC1

我已经Google和阅读许多不同的技巧,指南等,但其中大多数是过时的(2002年!)或似乎是基于查询和数组。我正在寻找更简单的东西(或者我相信)。

我知道我应该能够使用沿(AID =代理ID)线的东西动态地创建变量:

<cfset "GC#AID#" = getCreated.RecordCount> 

现在,我没有得到任何错误,所以我假设变量被正确创建,但是当我去输出变量是我真的进入一个问题(或者我认为)的地方。

无论我尝试多少种不同的方式,输出始终为GC1。相反,我希望的变量显示,而不是的变量名称。

我知道我不想使用评估,我已经看到了其他网站和关于使用结构符号的许多例子,但是这些一直与查询结合。

我觉得我必须在这里错过一些非常简单的东西。有关我如何能够在查询的上下文之外输出动态创建的变量的的任何想法?

对不起,长长的解释,只是想确保我清楚。

请让我知道,如果任何澄清将有所帮助。

如果相关,我正在使用ColdFusion 10。

在此先感谢!

编辑1

这是我目前有输出代码:

<cfset test = "GC#variables.AID#"> 
Test: <cfoutput>#test#</cfoutput> 

我意识到这可能是没谱。

+0

那么你的输出代码在哪里?这是您遇到问题的代码,但您不会发布它。 –

+0

@JasonDean道歉,补充。 –

+0

请参阅下面的答案。我认为它会回答你的问题。在上面的示例中,您将值GC1分配给变量测试。当你的输出#测试#时你还能期待什么其他输出? –

回答

14

一个选项:

设置的动态变量名:

<cfset variables["GC" & AID] = "Testing" /> 

输出所述动态变量名称的值:

<cfoutput>#variables["GC" & AID]#</cfoutput> 

另一种选择:

设置一个动态变量名称:

<cfset variables["GC#AID#"] = "Testing" /> 

输出所述动态变量名称的值:

<cfoutput>#variables["GC#AID#"]#</cfoutput> 
+1

非常感谢Jason。非常容易理解和完美工作! –

1

所有变量范围是结构。因此,通过该范围作为结构进行循环。当你的代码被写入时,它在变量范围内。我把它放在它自己的结构中,但是这里有一个你想要做的黑客版本:

<cfloop collection="#variables#" item="k"> 

    <cfif left(k,2) eq "GC"> 
     <cfoutput>#k# : #variables[k]#</cfoutput><br/> 
    </cfif> 

</cfloop>