<cfloop>

edit

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
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).

Index Loop

Index loop - Loop with a counter from/to/step

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:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

item
string, optional
edit

Key for the collection

Alias: value

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.

Conditional Loop

Conditional loop - Loop while a condition is true

Attribute Description
condition
string, optional
edit

Condition that controls the loop.

List Loop

List loop - Iterate through delimited strings

Attribute Description
list
string, optional
edit

A list, variable, or file name; contains a list. Used with the index attribute.

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:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

item
string, optional
edit

Key for the collection

Alias: value

delimiters
string, optional
edit

Character(s) that separates items in list

Array Loop

Array loop - Iterate through array elements

Attribute Description
array
array, optional
edit

An array.

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:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

item
string, optional
edit

Key for the collection

Alias: value

Collection/Struct Loop

Collection/Struct loop - Iterate through struct keys and values (aliases: key/value, struct)

Attribute Description
collection
any, optional
edit

Collection to loop over. Used with the item attribute.

struct
struct, optional
edit

struct to loop over

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:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

item
string, optional
edit

Key for the collection

Alias: value

Query Loop

Query loop - Iterate through query recordset

Attribute Description
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.

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.

File Loop

File loop - Read file line by line (aliases: from/to for startLine/endLine)

Attribute Description
file
string, optional
edit

file path

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:

  • When the Item attribute is also defined, the variable assigned to the Index attribute will contain the value of the Struct's Key/Value pair (otherwise, it will always contain the Key value)
  • When only the Index or Item attribute is defined, the variable will always contain the Key value.

Alias: key

item
string, optional
edit

Key for the collection

Alias: value

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

from
number, optional
edit

Beginning value of index.

endLine
number, optional
edit

end line

to
number, optional
edit

Ending value of index.

charset
string, optional
edit

charset for read the file

Times Loop

Times loop - Loop a specific number of times

Attribute Description
times
numeric, optional
edit

used for a simple loop that is looping n times

Examples

edit

Index & 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