Coldfusion - 如何遍历列表中的所有内容

时间:2013-06-07 15:13:44

标签: coldfusion

制作阵列:

<cfset tempArr = DeserializeJSON(URL.data) />
<cfset temp1 = "" />
<cfset temp2 = "" />
<cfset selectList1 = "" />
<cfset selectList2 = "" />

<cfloop array=#tempArr# index="i">
    <cfset temp1 = GetToken(i,1,":")>
    <cfset temp2 = GetToken(i,2,":")>

    <cfset selectList1 = listAppend(selectList1, temp1)>
    <cfset selectList2 = listAppend(selectList2, temp2)>
</cfloop>    

循环通过??:

<cfquery name="sample" datasource="database">
    SELECT *
    FROM table
    WHERE 
        <cfloop from="1" to="#listLen(selectList1)#" index="i"/>
        #ListGetAt(selectList1, i)# = <cfqueryparam value="#ListGetAt(selectList2)#" />
    </cfloop>
    <cfif i neq listLen(#selectList1#)>
        AND
    </cfif>
</cfquery>

我的目的是根据从javascript页面收到的数组在表格中动态搜索。数据来自form -> columnName:searchBy。即,样本片段为name:Jim。我想构建动态代码,允许我搜索不同的列,但我不能让我的循环工作。如果有帮助,我会收到此错误:

(Invalid CFML construct found on line 20 at column 59.)

就是这一行:

<cfloop from="1" to="#listLen(selectList1)#" index="i" />

3 个答案:

答案 0 :(得分:4)

Kyle的回答是100%正确,但这是一个更好的解决方案。使用列表是一个非常低效的过程(见下文),使用listGetAt只会激怒未来的程序员。您可以使用数组来存放数据,并使用默认的WHERE语句来简化循环。

<cfset tempArr = DeserializeJSON(URL.data) />
<cfset temp1 = "" />
<cfset temp2 = "" />
<cfset selectList1 = [] />
<cfset selectList2 = [] />

<cfloop array=#tempArr# index="i">
    <cfset temp1 = GetToken(i,1,":")>
    <cfset temp2 = GetToken(i,2,":")>

    <cfset arrayAppend(selectList1, temp1)>
    <cfset arrayAppend(selectList2, temp2)>
</cfloop>  

<cfif NOT arrayIsEmpty(tempArr)>
    <cfquery name="sample" datasource="database">
    SELECT column1, column2, column3
    FROM table
    WHERE 1 = 1
    <cfloop from="1" to="#listLen(selectList1)#" index="i"/>
      AND #selectList1[i]# = <cfqueryparam value="#selectList2[i]#" />
    </cfloop>
    </cfquery>
</cfif>
  • 当您附加到列表时,将在内存中创建一个新字符串,该字符串将前两个字符串组合在一起,并删除前一个字符串。这绝对是不成熟的优化,但是避免使用列表仍然是一种很好的做法,尤其是当您需要访问其中的元素时。

答案 1 :(得分:3)

我认为您的问题可能是cfloop标记是自动关闭的。试试这个:

<cfloop from="1" to="#listLen(selectList1)#" index="i">

答案 2 :(得分:1)

list属性可以在<cfloop>中使用。

<cfloop list="#selectList1#" index="i">
    #i# <!--- list element can be processed here with variable name #i# --->
</cfloop>