Loops 知道何时在ColdFusion中插入逗号
每隔一段时间,无论是在显示代码中还是在组装字符串时,我都会制作一个列表,并需要弄清楚如何在该列表中插入逗号 我通常是这样做的:Loops 知道何时在ColdFusion中插入逗号,loops,for-loop,coldfusion,Loops,For Loop,Coldfusion,每隔一段时间,无论是在显示代码中还是在组装字符串时,我都会制作一个列表,并需要弄清楚如何在该列表中插入逗号 我通常是这样做的: <cfset hide_comma=true> <cfloop ... some kind of loop ...> <cfif hide_comma><cfset hide_comma=false><cfelse>,</cfif> .... rest of code here ..
<cfset hide_comma=true>
<cfloop ... some kind of loop ...>
<cfif hide_comma><cfset hide_comma=false><cfelse>,</cfif>
.... rest of code here ...
</cfloop>
几乎相同的逻辑,只是已经有一个内置的方法来检查循环状态,而不是必须自己创建一个。我知道当循环通过
时,我可以使用QueryName.RowCount
来实现此目的,但在CFLOOP
s的文档中找不到类似的内容。您可以使用
示例代码:
<cfset myList = "" />
<cfloop ....>
<cfset myList = listAppend( myList, 'some value') />
</cfloop>
这将为您提供一个逗号分隔的列表。如果希望/需要列出由另一个字符分隔的列表,可以在listAppend()中将其指定为第二个参数
我刚刚运行了一个测试-似乎使用arrayaappend()
然后使用arraytolost()
比使用listpappend()
要快得多。因此,使用array append的代码应该是最佳路径。您可以使用
示例代码:
<cfset myList = "" />
<cfloop ....>
<cfset myList = listAppend( myList, 'some value') />
</cfloop>
这将为您提供一个逗号分隔的列表。如果希望/需要列出由另一个字符分隔的列表,可以在listAppend()中将其指定为第二个参数
我刚刚运行了一个测试-似乎使用arrayaappend()
然后使用arraytolost()
比使用listpappend()
要快得多。因此,使用array append的代码应该是最好的选择。对于编译变量,使用(用于查询)和函数是一种明智的方法
如果不处理查询或数组,请使用生成数组,然后使用ArrayToList转换为字符串
(注意:对于一个或两个项目是可以的,但在长循环中,它比使用ArrayAppend+ArrayToList慢-请参阅。)
关于:
几乎相同的逻辑,只是已经有一个内置的方法来检查循环状态,而不是必须自己创建一个。我知道,当循环通过时,我可以使用QueryName.RowCount来实现这一目的,但是在CFLOOPs的文档中找不到任何类似的东西
简短回答:不,除了标准的from/to和query循环之外,ColdFusion中没有内置的循环自动索引
对于索引循环,您当然可以使用索引:
<cfloop index="Index" from=1 to=#ArrayLen(MyArray)#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
不是第一排
对于查询循环,请使用行计数:
<cfloop query="MyQuery">
<cfif MyQuery.RowCount GT 1> Not First Row </cfif>
</cfloop>
不是第一排
对于项目循环,您需要创建自己的变量:
<cfset Row = 0 />
<cfloop index="Item" array=#MyArray#>
<cfif ++Row GT 1> Not First Row </cfif>
</cfloop>
<cfset Row= 0 />
<cfloop item="Item" collection=#MyStruct# >
<cfif ++Row GT 1> Not First Row </cfif>
</cfloop>
不是第一排
不是第一排
在Railo中,可以同时指定索引和项属性,并使这两个值都可用:
<cfloop index="Index" item="Item" array=#MyArray#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
不是第一排
但是索引引用了键,所以不能使用结构(您将获得键名,而不是行号)。对于编译变量,使用(用于查询)和函数是一种明智的方法
如果不处理查询或数组,请使用生成数组,然后使用ArrayToList转换为字符串
(注意:对于一个或两个项目是可以的,但在长循环中,它比使用ArrayAppend+ArrayToList慢-请参阅。)
关于:
几乎相同的逻辑,只是已经有一个内置的方法来检查循环状态,而不是必须自己创建一个。我知道,当循环通过时,我可以使用QueryName.RowCount来实现这一目的,但是在CFLOOPs的文档中找不到任何类似的东西
简短回答:不,除了标准的from/to和query循环之外,ColdFusion中没有内置的循环自动索引
对于索引循环,您当然可以使用索引:
<cfloop index="Index" from=1 to=#ArrayLen(MyArray)#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
不是第一排
对于查询循环,请使用行计数:
<cfloop query="MyQuery">
<cfif MyQuery.RowCount GT 1> Not First Row </cfif>
</cfloop>
不是第一排
对于项目循环,您需要创建自己的变量:
<cfset Row = 0 />
<cfloop index="Item" array=#MyArray#>
<cfif ++Row GT 1> Not First Row </cfif>
</cfloop>
<cfset Row= 0 />
<cfloop item="Item" collection=#MyStruct# >
<cfif ++Row GT 1> Not First Row </cfif>
</cfloop>
不是第一排
不是第一排
在Railo中,可以同时指定索引和项属性,并使这两个值都可用:
<cfloop index="Index" item="Item" array=#MyArray#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
不是第一排
但是索引引用了键,所以不能使用structs(您将获得键名,而不是行号)。我喜欢这样做:
<cfset separator="">
<cfloop ...>
#variables.separator#
<!--- rest of code here --->
<cfset separator=", ">
</cfloop>
#变量分隔符#
我喜欢这样做:
<cfset separator="">
<cfloop ...>
#variables.separator#
<!--- rest of code here --->
<cfset separator=", ">
</cfloop>
#变量分隔符#
很公平。我的理解是,对于大量内容,ListAppend的效率会降低。我的主要问题是是否有其他机制来跟踪我是否可以输出逗号,或者我是否必须组合一个列表或数组然后输出它。你可以使用arrayaappend
然后arrayToList(yourArray)
如果你的列表很长,也许有更好的解决方案。我使用listAppend()和arrayAppend()处理了数百个没有问题的项目。如果您是从查询对象中的列创建列表,也可以使用valueList()-@MattBusche,这是我在问题中采用的方法。@ScottStroz这些通常是文本中更大、更难处理的部分,这就是为什么将其作为模板而不是组合变量来处理更为理想的原因。而且通常我所添加的文本中已经有逗号了。这很公平。我的理解是,对于大量内容,ListAppend的效率会降低。我的主要问题是是否有其他机制来跟踪我是否可以输出逗号,或者我是否必须组合一个列表或数组然后输出它。你可以使用arrayaappend
然后arrayToList(yourArray)
如果你的列表很长,也许有更好的解决方案。我使用listAppend()和arrayAppend()处理了数百个没有问题的项目。如果您是从查询对象中的列创建列表,也可以使用valueList()-@MattBusche,这是我在问题中采用的方法。@ScottStroz这些通常是文本中更大、更难处理的部分,这就是为什么处理此问题更为理想的原因