2

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

  • V1= 我的查询中的单词 1
  • V2= 我的查询中的单词 2
  • ETC...

我可以像这样静态地做到这一点:

<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 中没有索引和查询吗?

4

3 回答 3

5

由于您使用的是查询循环,因此您已经可以访问内置索引,即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>


更新:

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

于 2013-05-17T17:34:01.613 回答
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>
于 2013-05-17T17:16:02.070 回答
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>

这还允许您一次转储所有单词以及动态生成的变量名/结构键无法对数组进行的操作

于 2013-05-17T20:17:49.910 回答