创建动态命名的变量

时间:2013-05-17 17:09:17

标签: variables coldfusion cfloop

我很新,你会看到的。我想创建以下变量:

  • V1 =我的查询中的第1个字词
  • V2 =我的查询中的第2个字词
  • 等...

我可以静态地这样做:

<cfset V1=#qryGetWords["WordName"][1]#>
<cfset V2=#qryGetWords["WordName"][2]#>
<cfset V3=#qryGetWords["WordName"][3]#>
<cfset V4=#qryGetWords["WordName"][4]#>

但我想动态地做。我已经看到了其他答案,但我也无法让他们工作。可以通过调整语法来完成以下任何工作吗?

<cfloop query="qryGetWords" index="i">
<cfset "V#i#" = #qryGetWords["WordName"]["i"]#>
</cfloop>

我可以在cfloop中没有索引和查询吗?

3 个答案:

答案 0 :(得分:5)

由于您使用的是query loop,因此您已经可以访问内置索引,即query.currentRow。与cfoutput标记一样:

  

当您指定查询属性时,此标记会循环查询行....它还会将query.currentRow变量设置为正在处理的当前行。

示例:

<cfloop query="qryGetWords">
    <!--- within the loop, you could also use the shortcut: qryGetWords.WordName --->
    <cfset variables["V"& currentRow] = qryGetWords["WordName"][currentRow]>
</cfloop>


<强>更新

虽然这回答了提出的问题,Dan's answer提出了一个很好的观点。它可能不是存储信息的最佳方式。如果您详细说明您的总体目标,我们可以建议一种可能更灵活的方法。

答案 1 :(得分:2)

<cfloop query="qryGetWords">
    <cfset "V#qryGetWords.currentRow#" = qryGetWords.WordName>
</cfloop>

注意:在qryGetWords.中使用cfloop query=是可选的。你可以省略它,它仍然可以工作。有些人喜欢用它,有些则不喜欢。那是你的选择。

<cfloop from="1" to="#qryGetWords.recordCount#" index="i">
    <cfset "V#i#" = qryGetWords.WordName[i]>
</cfloop>

答案 2 :(得分:1)

如果您需要循环覆盖它们或稍后通过索引引用,则可以考虑使用数组

如果是,那么你可以像这样构建数组

<cfset words = [] />
<cfloop query="queryname">
    <cfset arrayappend(words, queryname.wordname) />
</cfloop>

或通过列表的内部功能

<cfset words = listtoarray(valuelist(queryname.wordname)) />

如果内容可能包含逗号,那么必须使用您选择的另一个分隔符(新行chr(10)可能最安全,虽然我经常使用管道“|”,cf喜欢字符分隔的字符串)

<cfset words = listtoarray(valuelist(queryname.wordname, chr(10)), chr(10)) />

那么你可以静静地引用

<cfif something eq words[3]>
    #blah#
</cfif>

或动态如此(或者在新版本上可能更容易,我仍然在CF8上)

<cfloop from="1" to="#arraylen(words)#" index="i">
    <cfoutput><div>#i#: #words[i]#</div>
</cfloop>

这也允许您一次性转储所有单词,并使用动态生成的变量名称/ structkeys无法实现对数组的操作