Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 知道何时在ColdFusion中插入逗号_Loops_For Loop_Coldfusion - Fatal编程技术网

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这些通常是文本中更大、更难处理的部分,这就是为什么处理此问题更为理想的原因