Jor*_*ter 1 coldfusion loops for-loop
每隔一段时间,无论是在显示代码中还是在组装字符串中,我都会制作一个列表并需要弄清楚如何在该列表中插入逗号.
这就是我通常这样做的方式:
<cfset hide_comma=true>
<cfloop ... some kind of loop ...>
<cfif hide_comma><cfset hide_comma=false><cfelse>,</cfif>
.... rest of code here ...
</cfloop>
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更清洁的方法.我意识到一个选项将类似于以下内容:
<cfset output_as_array = []>
<cfloop ... some kind of loop ...>
<cfset loop_output = "">
... rest of code here, but append all output to loop output instead ...
<cfset ArrayAppend(output_as_array, trim(loop_output))>
</cfloop>
<cfoutput>#ArrayToList(output_as_array, ", ")#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
但这似乎并不是更清楚.
相比之下,在Django中,每个循环都有一个内置计数器,所以我可以编写如下内容:
{% for ... some kind of loop ... %}
{% if not forloop.first %},{% endif %}
... rest of code here ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
几乎相同的逻辑,只有已经有一种内置的方法来检查循环状态,而不是必须自己创建一个.我知道循环通过一个<cfoutput query=...>
我可以QueryName.RowCount
用于此目的,但在CFLOOP
s 的文档中找不到任何类似的东西.
对于编译变量,使用ValueList(用于查询)和ArrayToList函数是一种明智的方法.
如果不处理查询或数组,则使用ArrayAppend构建数组,然后使用ArrayToList转换为字符串.
(注意:ListAppend适用于一个或两个项目,但在长循环中它比使用ArrayAppend + ArrayToList要慢 - 请参阅此处的信息.)
关于:
几乎相同的逻辑,只有已经有一种内置的方法来检查循环状态,而不是必须自己创建一个.我知道在循环使用时我可以使用QueryName.RowCount来实现此目的,但在CFLOOPs的文档中找不到类似的东西.
简答:不,除了标准的from/to和查询循环之外,ColdFusion中没有内置的循环自动索引.
对于索引循环,您当然可以使用索引:
<cfloop index="Index" from=1 to=#ArrayLen(MyArray)#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
对于查询循环,请使用rowcount:
<cfloop query="MyQuery">
<cfif MyQuery.RowCount GT 1> Not First Row </cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
要循环遍历项目,您需要创建自己的变量:
<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>
Run Code Online (Sandbox Code Playgroud)
在Railo中,您可以指定索引和项目属性,并且两个值均可用:
<cfloop index="Index" item="Item" array=#MyArray#>
<cfif Index GT 1> Not First Row </cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
索引虽然指的是键,但你不能用结构来做(你会得到键名,而不是行号).