<cfloop>
Looping is a very powerful programming technique that lets you repeat a set of instructions or display output repeatedly until one or more conditions are met.
cfloop supports five types of loops.
This tag must have a body.
This tag is also supported within <cfscript>
<cfloop
index=string
from=number
to=number
step=number
condition=string
query=object
startRow=number
endRow=number
maxRows=number
list=string
array=array
delimiters=string
collection=any
struct=struct
item=string
file=string
characters=number
startLine=number
endLine=number
charset=string
group=string
groupCaseSensitive=boolean
label=string
times=numeric
><!--- body ---></cfloop>
| Attribute | Description |
|---|---|
index
string, optional
|
edit
Index value. Lucee sets it to from value and increments or decrements by step value, until it equals to value. When looping over a Struct/Collection:
Alias: key |
from
number, optional
|
edit
Beginning value of index. |
to
number, optional
|
edit
Ending value of index. |
step
number, optional
|
edit
Step by which to increment or decrement the index value. |
condition
string, optional
|
edit
Condition that controls the loop. |
query
object, optional
|
edit
Query that controls the loop. This can be a variable name or the query itself. |
startRow
number, optional
|
edit
First row of query that is included in the loop. |
endRow
number, optional
|
edit
Last row of query that is included in the loop. You cannot use this attribute together with the attribute maxRows. |
maxRows
number, optional
|
edit
Specifies the maximum number of rows to display in the output section. You cannot use this attribute together with the attribute endrow. |
list
string, optional
|
edit
A list, variable, or file name; contains a list. Used with the index attribute. |
array
array, optional
|
edit
An array. |
delimiters
string, optional
|
edit
Character(s) that separates items in list |
collection
any, optional
|
edit
Collection to loop over. Used with the item attribute. |
struct
struct, optional
|
edit
struct to loop over |
item
string, optional
|
edit
Key for the collection Alias: value |
file
string, optional
|
edit
file path |
characters
number, optional
|
edit
The number of characters to read during each iteration of the loop from the file specified in the file attribute. If the value of the characters attribute is more than the number of characters in the file, Lucee uses the number of characters in the file. |
startLine
number, optional
|
edit
start line |
endLine
number, optional
|
edit
end line |
charset
string, optional
|
edit
charset for read the file |
group
string, optional
|
edit
Specifies the query column to use when you group sets of records together to send as an e-mail message. For example, if you send a set of billing statements to customers, you might group on "Customer_ID." The group attribute, which is case sensitive, eliminates adjacent duplicates when the data is sorted by the specified field. See the Usage section for exceptions. |
groupCaseSensitive
boolean, optional
|
edit
Boolean indicating whether to group with regard to case or not. The default value is NO; case is considered while grouping. If the query attribute specifies a query object that was generated by a case-insensitive SQL query, set the groupCaseSensitive attribute to NO to keep the recordset intact. |
label
string, optional
|
edit
used to address this loop from a "break" or "continue" statement (instead of the nearest one). |
times
numeric, optional
|
edit
used for a simple loop that is looping n times |
Examples
editIndex & Conditional loop
<cfloop index = "LoopCount" from = "1" to = "5">
The loop index is <cfoutput>#LoopCount#</cfoutput><br>
</cfloop>
<br><u>Conditional loop</u><br>
<cfset CountVar = 1>
<cfloop condition = "CountVar LESS THAN OR EQUAL TO 5">
<cfset CountVar = CountVar + 1>
CountVar is <cfoutput>#CountVar#</cfoutput><br>
</cfloop>
List loop
<cfset listEle = "lucee,test,case">
<br><u>Simple list loop</u><br>
<cfloop list="#listEle#" index="res">
<cfoutput>#res#</cfoutput><br>
</cfloop>
<br><u>List loop</u><br>
<cfset listDeliEle = "I;Love;Lucee">
<cfloop list="#listDeliEle#" index="element" delimiters=";">
<cfoutput>#element#</cfoutput><br>
</cfloop>
<br><u>deli loop with index</u><br>
<cfloop index="a" from="1" to="#listlen(listEle)#">
<cfoutput>#listgetat(listEle,a)#</cfoutput><br>
</cfloop>
<br><u>Condition with list</u><br>
<cfset cV = 1>
<cfloop condition="cv lte #listlen(listele)#">
<cfoutput>#listgetat(listEle,cV)#</cfoutput><br>
<cfset cV = cV+1>
</cfloop>
Array loop & Struct loop
<cfoutput>
<cfset arr = ["I","Love","Lucee"]>
<br><u>Array using index loop</u><br>
<cfloop array="#arr#" index="arr">
#arr#<br>
</cfloop>
<cfset Departments = {"Save ":"Water ", "Plant ":"gren ", "Protect ":"Earth "}>
<br><u>Struct loop</u><br>
<cfloop collection="#Departments#" item = "person">
#person#
#StructFind(Departments, person)#<br>
</cfloop>
</cfoutput>
Query loop
<cfset qry = ExtensionList()>
<cfloop query="#qry#">
<cfoutput>#qry.currentrow#</cfoutput>
</cfloop>
<br>
<cfscript>
loop query="#qry#"{
echo( qry.currentrow & " " );
if (qry.currentrow eq 10)
break;
if (qry.currentrow mod 2 eq 1)
continue;
echo( "... " );
}
</cfscript>
See also
- Core CFML Language
- Loop Labels
- Looping Through Files
- Loop - times
- <cfbreak>
- <cfcontinue>
- <cfwhile>
- Search Issue Tracker open_in_new
- Search Lucee Test Cases open_in_new (good for further, detailed examples)